【发布时间】:2021-02-21 22:38:09
【问题描述】:
nLst1 = ['A','B','C','D']
nLst2 = nLst1
# And
nLst3 = nLst1[:]
【问题讨论】:
-
nLst2 = nLst1不是副本。这就是区别。 -
查看在每个列表上调用id() 的结果。 1 和 2 相等,3 不相等。
nLst1 = ['A','B','C','D']
nLst2 = nLst1
# And
nLst3 = nLst1[:]
【问题讨论】:
nLst2 = nLst1 不是副本。这就是区别。
nLst2 = nLst1 使nLst2 指向与nLst1 相同的内存,这意味着修改一个数组的内容会修改另一个数组:
list1 = [1, 2, 3]
list2 = list1
list2[0] = 3
list1 # [3, 2, 3]
但是,nLst3 = nLst1[:] 复制了nLst1,因此这两个数组是不相交的:
list1 = [1, 2, 3]
list2 = list1[:]
list2[0] = 3
list1 # still [1, 2, 3]
阅读更多here。
【讨论】:
第一个不是复制,它会同时丢失指向相同的内存地址,第二个会复制。如果第一个被实施,那么改变一个会影响另一个。第二个将定义一个指向不同内存地址的列表的新切片副本,您也可以使用list.copy() 来实现,它们都将采用O(n)
【讨论】: