Python不可变对象赋值疑问:为何重赋值未同步至关联变量?
Python变量赋值行为解析
先看你的代码示例:
name = "jim" student = name name = "tim" print(name) # 输出 tim print(student) # 输出 jim
核心逻辑:变量是对象的引用,不是容器
Python里的变量本质是指向内存中对象的引用(可理解为指向对象的指针),而非存储值的容器。拆解每一步的具体行为:
name = "jim":Python在内存中创建字符串对象"jim",让变量name指向这个对象的内存地址。student = name:将name当前指向的地址复制给student,此时name和student同时指向同一个"jim"对象。name = "tim":并非修改原有"jim"对象,而是在内存中新生成字符串对象"tim",然后把name的指向切换到这个新对象。student的指向未发生变化,依然指向原来的"jim",因此打印结果不同。
关键原因:不可变对象的特性
字符串属于Python的不可变对象——一旦创建就无法修改其内部内容。你给name重新赋值"tim"的操作,本质是切换变量的引用目标,而非修改原有对象。如果是列表这类可变对象,直接修改对象内容时,所有指向它的变量都会同步看到变化,但此场景是变量引用的切换,和对象本身的修改无关。
相关技术术语(方便深入研究)
- 对象引用:变量与内存对象的关联关系,变量存储的是对象的内存地址。
- 不可变对象:创建后无法修改内部内容的对象,如字符串、整数、元组。
- 可变对象:可修改内部内容的对象,如列表、字典、集合。
内容的提问来源于stack exchange,提问作者icecream
相关产品推荐
相关产品推荐

