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

  • 本文关键字:num 区别 python arrays
  • 更新时间 :
  • 英文 :

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

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

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

这表明 VAL 比 NUM 长

与:

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

您有 2 个引用指向内存中的同一列表。

跟:

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

内存中有 2 个不同的列表:valsnums列表的副本(为空)。

写入vals = nums[:]与写入vals = list(nums)相同:您创建一个新列表(其中包含相同的项目)。

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

在第二种情况下,您将从数字创建新的列表值。这两个列表都将指出单独的内存位置,因此对 vals 列表所做的更改不会对 nums 列表产生任何影响。

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

而在第一种情况下,您将列表编号复制到 val,并且 val 和 num 都指向相同的堆存储位置。 因此,对 vals 所做的更改将自动影响 nums。

有关更多信息,您可以阅读文章- https://docs.python.org/3/library/copy.html

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

initial = []
a = initial
b = initial[:]
assert a is initial
assert b is not initial

更准确地说,如文档中所述,使用[:]编制索引等效于copy列表:

initial = []
# these are equivalent
a = initial[:]
b = initial.copy()
assert a is not initial
assert b is not initial

最新更新