Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:避免子列表指向同一元素_Python_List_Reference - Fatal编程技术网

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]]

在Python中,我需要一个
列表
,其中包含给定数量的子列表,其形式为
[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)
资料来源: