python - 变量赋值和修改(Python中)

标签 python list variables

当我运行这个脚本时(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]

python variables

>>> b = a

python variables

>>> a.append(3)

python variables

在这里我们可以清楚地看到变量ba绑定(bind)到同一个对象。

您可以使用 is 运算符来测试两个对象在物理上是否相同,这意味着它们在内存中是否具有相同的地址。这也可以使用 id() 进行测试。功能。

>>> a is b
>>> True
>>> id(a) == id(b)
>>> True

因此,在这种情况下,您必须明确索取副本。 完成此操作后,两个不同的列表对象之间将不再有连接。

>>> b = list(a)
>>> a is b
>>> False

python variables

关于python - 变量赋值和修改(Python中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58927954/

相关文章:

python - 如何在 Python 中验证字典的结构(或模式)?

python - 简单函数错误

c# - 隐藏或向变量添加新行

java - 无需启动 Eclipse 即可访问属性/环境变量?

python - django模板生成的html代码

python - 如何使用 python API 保存/显示 giphy gif?

java - 全局变量的大小与返回列表的大小不同

python - 更改列表中元组中的值

python - 列表和元组有什么区别?

javascript - 如何获取正在使用的 CSS 变量的名称?