x = 3
x = 4
第二行是赋值语句还是新变量绑定?
答案 0 :(得分:2)
没有区别。无论名称是否已存在,在Python中分配名称都是相同的。
答案 1 :(得分:2)
在(非常基本的)C术语中,当您为变量赋值时,会发生这种情况:
x = malloc(some object struct)
如果我正确地解释了您的问题,您就会在询问重新分配x
时会发生什么 - 这个:
A. *x = some other value
或者这个:
B. x = malloc(something else)
正确的答案是B
,因为变量指向的对象也可以被引用到其他地方并且更改它可能以不可预测的方式影响程序的其他部分。因此,Python从旧结构中取消绑定变量名称(减少其"引用计数器"),分配新结构并将名称绑定到这个新结构。一旦结构的参考计数器变为零,它就会变成垃圾,并在某些时候被释放。
当然,这个工作流程在内部进行了高度优化,细节可能因对象本身,特定解释器(CPython,Jython等)以及版本而异。作为userland python程序员,我们只能保证
x = old_object
然后
x = new_object
不会影响" old_object"无论如何。