通过这些方法在 python 中初始化数组的区别
Diferrence in inititializing array in python by these methods
我用两种方法声明了一个array of array:
方法一:
bucket = [[]] * 6)
方法二:
bucket = [[] for i in range(6)]
但是在将元素附加到内部数组时,它的工作方式不同。
bucket[0].append(1)
print(bucket)
结果是这样的:
使用方法一时:
Output:
[[1], [1], [1], [1], [1], [1], [1]]
使用方法 2 时:
Output:
[[1], [], [], [], [], [], []]
我想了解为什么这会给我两种不同类型的结果。
事情是这样的:
- 当你这样做时
bucket = [[]]*(len(nums)+1)
所有嵌套列表
都一样。
- 确认您可以
print(id(bucket[0]))
和
print(id(bucket[1]))
.
- 两者都将打印相同的内存地址,因为它们都相同。所以,当你
将值附加到它为所有打印的任何嵌套列表
嵌套列表,因为它是同一个列表对象。
我用两种方法声明了一个array of array:
方法一:
bucket = [[]] * 6)
方法二:
bucket = [[] for i in range(6)]
但是在将元素附加到内部数组时,它的工作方式不同。
bucket[0].append(1)
print(bucket)
结果是这样的:
使用方法一时:
Output:
[[1], [1], [1], [1], [1], [1], [1]]
使用方法 2 时:
Output:
[[1], [], [], [], [], [], []]
我想了解为什么这会给我两种不同类型的结果。
事情是这样的:
- 当你这样做时
bucket = [[]]*(len(nums)+1)
所有嵌套列表
都一样。 - 确认您可以
print(id(bucket[0]))
和
print(id(bucket[1]))
. - 两者都将打印相同的内存地址,因为它们都相同。所以,当你 将值附加到它为所有打印的任何嵌套列表 嵌套列表,因为它是同一个列表对象。