首页 > 解决方案 > Python中的可变和不可变对象

问题描述

我试图理解 python 中的可变/不可变对象。下面的示例,我希望为所有 id(**) 获得相同的对象 id,但 #list 4 不是。我该如何解释只有 #list 4 给出不同对象 ID 的原因?谢谢你。

# list 1
la = [1,2,3]
print('la=', la, ', id(la)= ',id(la))

# list 2
la[0]=9
print('la=', la, ', id(la)= ',id(la))

# list 3
lb=la
print('lb=', lb, ', id(lb)= ',id(lb))

# list 4
lc=la[:]
print('lc=', lc, ', id(lc)= ',id(lc))
la= [1, 2, 3] , id(la)=  2678849549576
la= [9, 2, 3] , id(la)=  2678849549576
lb= [9, 2, 3] , id(lb)=  2678849549576
lc= [9, 2, 3] , id(lc)=  2678844118664

标签: pythonimmutabilitymutable

解决方案


[:]语法是 的快捷方式,copy它从原始对象创建一个新的(浅拷贝)对象。浅拷贝是一个新的高级对象,因此嵌套对象只会被引用(不会创建嵌套对象的新副本)。例子,

a = [1,2,3]
b = a
id(a) == id(b) # True
c = a[:]
id(a) == id(c) # False
id(a[0]) == id(c[0]) # True

推荐阅读