繁体   English   中英

什么是可变的 object 在 Python 中的真正含义

[英]What mutable object really means in Python

我对可变 object 的真正含义感到很困惑

A=[1,3,4]
print(id(A))
A.append(1)
print(id(A))

打印输出显示相同的地址,而对于以下

A=[1,3,4]
print(id(A))
A=A+[1,2]
print(id(A))

第一件事是它不会报告错误,因为我期望它是可变的,它会执行迭代过程,另一方面,地址是不同的。

当你这样做

A = [1,2,3]
A.append(1)

您在适当的位置修改列表,因此不会导致其地址发生变化。 另一方面,当你这样做

A = [1,2,3]
A = A + [1,2]

您创建一个临时的新 object A + [1,2]然后将现有列表A重新绑定到这个新创建的 object (即新创建的列表),从而更改其地址/id。

第一个示例通过调用append()来改变列表。 所以object的id()每次都是一样的。

第二个示例将变量A重新分配给一个新列表,该列表是连接两个列表的结果。 不会改变原始列表。 要了解原因,让我们做一个小修改:

A=[1,3,4]
print(id(A))
B=A+[1,2]
print(id(A))
print(id(B))

现在您将看到id(A)两次都相同。 除了您不再引用第一个列表之外,您的原始代码等效于此。

A = [1,2,3]
A.append(4) #just appends new element to list (but does not create new memory address to A)
A = A + [5,6] # first do [1,2,3,4] + [5,6] => [1,2,3,4,5,6], then assign this to A (which is creating and assigning new memory address to A).

可变对象是指可以更改的数据类型,例如列表、字典等,因为您始终可以 append 或向它们添加值。

相反,IMMUTABLE 对象是那些不能更改的对象,例如 python 中的 TUPLE。

希望它有所帮助。

你必须使用.append() function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM