why mutable objects having same value have different id in Python
感谢您宝贵的时间,我刚刚开始学习Python。我遇到了易变和不变的物体。据我所知,可变对象在创建后可以更改。
1 2 3 4 5 6 | a = [1,2,3] print(id(a)) 45809352 a = [3,2,1] print(id(a)) 52402312 |
那么,为什么同一个列表"a"的ID在其值更改时会发生更改。
你的解释不正确。
当您将新的
另一方面,你可以做到:
1 | a[:] = [3,2,1] |
然后参考不会改变。
可变表示对象的内容已更改。例如,
但是,当您重新分配时,您会创建一个新对象并将其分配给
不可变并不意味着你分配了一个新的对象,它意味着你的原始对象可以"就地"更改,例如通过
1 2 3 4 5 6 7 8 9 10 11 | >>> 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 |
当你这样做的时候
1 | a = [3, 2, 1] |
如果更改列表,则其ID不会更改。但是你可以做一些事情来创建一个新的列表,然后它也会有一个新的ID。
例如。,
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> 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 |