当我运行这个脚本时(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 是否永久绑定(bind)到 a ?如果是这样,我可以让他们独立吗?怎么办?
最佳答案
Python 中的内存管理涉及包含所有 Python 对象和数据结构的私有(private)堆内存位置。
Python 的运行时仅处理对对象的引用(这些对象都位于堆中):Python 堆栈上的内容始终是对其他地方的值的引用。
>>> a = [1, 2]
>>> b = a
>>> a.append(3)
在这里我们可以清楚地看到变量b
与a
绑定(bind)到同一个对象。
您可以使用 is
运算符来测试两个对象在物理上是否相同,这意味着它们在内存中是否具有相同的地址。这也可以使用 id()
进行测试。功能。
>>> a is b
>>> True
>>> id(a) == id(b)
>>> True
因此,在这种情况下,您必须明确索取副本。 完成此操作后,两个不同的列表对象之间将不再有连接。
>>> b = list(a)
>>> a is b
>>> False
关于python - 变量赋值和修改(Python中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927954/