变量赋值和修改(在python中)
当我运行此脚本(Python v2.6)时:
a = [1,2]
b = a
a.append(3)
print a
>>>> [1,2,3]
print b
>>>> [1,2,3]
我期望print b
输出[1,2]
。当我所做的只是改变a时,为什么b被改变了?b是否永久绑定到a?如果是这样,我可以使它们独立吗?怎么样?
-
Python中的内存管理涉及一个私有堆内存位置,该位置包含所有Python对象和数据结构。
Python的运行时仅处理对对象的引用(所有对象都驻留在堆中):Python堆栈上的内容始终是对其他位置的值的引用。
>>> a = [1, 2]
>>> b = a >>> a.append(3)
在这里,我们可以清楚地看到变量
b
与绑定到同一对象a
。您可以使用
is
运算符来测试两个对象在物理上是否相同,这意味着它们在内存中是否具有相同的地址。也可以使用id()
功能进行测试。>>> a is b >>> True >>> id(a) == id(b) >>> True
因此,在这种情况下, 您必须明确要求复制 。完成此操作后,两个不同的列表对象之间将不再有连接。
>>> b = list(a) >>> a is b >>> False