nums = []
vals = nums
vals.append(1)
结果显示nums和vals的长度相同,但是
nums = []
vals = nums[:]
vals.append(1)
这表明vals大于num
答案 0 :(得分:0)
使用[:]
创建一个新的list
,该值包含与nums
相同的值,但是这个新的list
与该对象不是 nums
。这就是为什么在第二个示例中vales
比nums
长的原因:它不是同一对象。
initial = []
a = initial
b = initial[:]
assert a is initial
assert b is not initial
更准确地说,用[:]
进行索引的as stated in the documentation等同于列表中的copy
:
initial = []
# these are equivalent
a = initial[:]
b = initial.copy()
assert a is not initial
assert b is not initial
答案 1 :(得分:0)
使用:
nums = []
vals = nums
vals.append(1)
您有2个引用指向内存中的同一列表。
使用:
nums = []
vals = nums[:]
vals.append(1)
您的内存中有2个不同的列表:vals
是nums
列表的副本(为空)。
写作vals = nums[:]
与写作vals = list(nums)
相同:您创建了一个新列表(其中包含相同的项目)。
答案 2 :(得分:0)
nums = []
vals = nums[:]
vals.append(1)
在第二种情况下,您将根据num创建新的列表值。这两个列表都将指出单独的内存位置,因此对vals列表所做的更改不会对nums列表产生任何影响。
nums = []
vals = nums
vals.append(1)
在第一种情况下,您要将列表数字复制到val,而val和num都指向相同的堆存储位置。 因此,对val所做的更改将自动影响num。
有关更多信息,您可以阅读以下文章- https://docs.python.org/3/library/copy.html