感谢您宝贵的时间,我刚开始学习Python。我遇到了Mutable和Immutable对象。 据我所知,可变对象在创建后可以更改。
a = [1,2,3]
print(id(a))
45809352
a = [3,2,1]
print(id(a))
52402312
那么为什么同一个列表的ID" a"更改其值时会更改。
答案 0 :(得分:5)
你的解释是不正确的。
当您将新list
分配给a
时,您可以更改其引用。
另一方面,你可以这样做:
a[:] = [3,2,1]
然后引用不会改变。
答案 1 :(得分:1)
mutable 表示对象的内容已更改。例如a.append(4)
实际上使a
等于[1, 2, 3, 4]
,而相反,追加到字符串(不可变)不会改变它,它会创建一个新的。{/ p >
但是,当您重新分配时,您创建了一个新对象并将其分配给a
,您不会改变a
的现有内容。之前的内容丢失(除非被其他变量引用)
答案 2 :(得分:0)
如果更改列表,则其ID不会更改。但是你可以做一些事情而不是创建一个新的列表,然后它也会有一个新的id。
如,
>>> l=[]
>>> id(l)
140228658969920
>>> l.append(3) # Changes l
>>> l
[3]
>>> id(l)
140228658969920 # Same ID
>>> l = l + [4] # Computes a new list that is the result of l + [4], assigns that
>>> l
[3, 4]
>>> id(l)
140228658977608 # ID changed
答案 3 :(得分:0)
当你这样做时
a = [3, 2, 1]
a
的链接。a
变量。答案 4 :(得分:0)
不可变并不意味着你分配一个新对象,这意味着你的原始对象可以“就地”改变,例如通过.append()
>>> my_list = [1,2,3]
>>> id(my_list)
140532335329544
>>> my_list.append(5)
>>> id(my_list)
140532335329544
>>> my_list[3] = 4
>>> my_list
[1, 2, 3, 4]
>>> id(my_list)
140532335329544