Python:避免子列表指向同一元素
在Python中,我需要一个Python:避免子列表指向同一元素,python,list,reference,Python,List,Reference,在Python中,我需要一个列表,其中包含给定数量的子列表,其形式为[0,0]。例如: >>> myLen = 2 >>> myList = [[0,0]] * myLen >>> myList [[0, 0], [0, 0]] 事实证明,每个子列表总是指向同一个元素,因此修改一个子列表会自动修改另一个子列表 >>> myList[0][0] = 2 >>> myList [[2, 0], [2, 0]]
列表
,其中包含给定数量的子列表,其形式为[0,0]
。例如:
>>> myLen = 2
>>> myList = [[0,0]] * myLen
>>> myList
[[0, 0], [0, 0]]
事实证明,每个子列表总是指向同一个元素,因此修改一个子列表会自动修改另一个子列表
>>> myList[0][0] = 2
>>> myList
[[2, 0], [2, 0]]
为什么呢?如何避免这种行为?使用列表理解:
myList = [[0,0] for _ in range(myLen)]
创建单独的子列表
将列表相乘时,不会复制内部列表,只复制对子列表的引用。你基本上是这样做的:
myList = [[0,0]]
for _ in range(myLen - 1):
myList.append(myList[0])
另一方面,列表理解执行为每个循环迭代创建子列表的表达式,因此每次运行时都会创建一个全新的列表:
myList = []
for _ in range(myLen):
myList.append([0,0])
也许你可以用numpy:
import numpy
matrix = numpy.zeros(myLen, 2)
资料来源: