X=3 X=4
第二行是赋值语句还是新变量绑定?
发布于 2014-10-24 08:49:23
在(非常基本的)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“。
发布于 2014-10-24 08:12:56
没有什么不同。在Python中为名称分配是相同的,不管名称是否已经存在。
https://stackoverflow.com/questions/26543890
复制相似问题