如果有一个列表list1 = [1, 2, 3, 4, 5]
,并且有两个空列表list2
与list3
,我们想要将list1
的值给与list2
与list3
,分别使用list2 = list1
和list3 = list1[:]
会得到不同的结果吗?代码如下:
NB(注意): #
后面的部分表示输出结果。
class Debug:
def __init__(self):
self.list1 = [1, 2, 3, 4, 5]
self.list2 = []
self.list3 = []
def mainProgram(self):
self.list2 = self.list1
self.list3 = self.list1[:]
print(self.list1) # [1, 2, 3, 4, 5]
print(self.list2) # [1, 2, 3, 4, 5]
print(self.list3) # [1, 2, 3, 4, 5]
print(id(self.list1)) # 2164916562760
print(id(self.list2)) # 2164916562760
print(id(self.list3)) # 2164916551496
if __name__ == "__main__":
main = Debug()
main.mainProgram()
从打印结果我们可以看到,listt2
的值与list3
的值是一样的,但是当我们打印它们的标识符时,我们看到list2
和list1
拥有相同的标识符,而list3
的标识符与list1
是不同的。实际上list2
与list1
是完全一样的,而list3
与list1
表面上的值是相同的,标识符不同。self.list3 = self.list1[:]
完成的是类似于copy
模块中的浅拷贝copy()
,list3
与list1
的子对象还是同一对象。
深浅拷贝可以从这里了解(超链接点击即可跳转)。
如果大家觉得有用,请高抬贵手给一个赞让我上推荐让更多的人看到吧~