num [:]和num有什么区别?

时间:2020-04-12 15:41:40

标签: python arrays

nums = []
vals = nums
vals.append(1)

结果显示nums和vals的长度相同,但是

nums = []
vals = nums[:]
vals.append(1)

这表明vals大于num

3 个答案:

答案 0 :(得分:0)

使用[:]创建一个新的list,该值包含与nums相同的值,但是这个新的list与该对象不是 nums。这就是为什么在第二个示例中valesnums长的原因:它不是同一对象。

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个不同的列表:valsnums列表的副本(为空)。

写作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