Python 为什么可以';我不能正确地分配给3d列表吗?

Python 为什么可以';我不能正确地分配给3d列表吗?,python,Python,假设我制作了一个3D列表 list = [[[0, 0], [0, 0]], [[0, 0], [0, 0]]] 我跑 list[0][0][0] = 1 #set the first element of the first list of the first list to 1 print(list) 我希望得到一份工作 [[[1, 0], [0, 0]], [[0, 0], [0, 0]]] 但是相反,我得到了 [[[1, 0], [1, 0]], [[1, 0], [1, 0]]

假设我制作了一个3D列表

list = [[[0, 0], [0, 0]], [[0, 0], [0, 0]]]
我跑

list[0][0][0] = 1 #set the first element of the first list of the first list to 1

print(list)
我希望得到一份工作

[[[1, 0], [0, 0]], [[0, 0], [0, 0]]]
但是相反,我得到了

[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]
有人能想出如何让它只给3D列表中的一个元素分配变量,而不是给每个第一个元素分配变量吗?谢谢


如果有必要的话,我使用的是Python 3.7 32位。

我通过假设您实际如何定义列表来复制您的结果。我假设您在下面定义了一些变量,例如
ab
,并使用它来创建列表。但是,新列表仍然是对
ab
变量的一系列引用,因此更改一个变量实际上会更改
ab
,这将影响整个列表

ab = [0,0]

mylist = [[ab,ab],[ab,ab]]
mylist[0][0][0] = 1

print(mylist,"    ",ab)
输出

[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]      [1, 0]
要解决此问题,只需使用
0
而不是某些变量初始化列表:

mylist = [[[0,0],[0,0]],[[0,0],[0,0]]]


我得到了你想要的,而不是你得到的。这就是你的代码吗?你是如何建立你的
列表的?你真的是这样宣布的吗?或者你在做类似于
list=[[a,a],[a,a]]
的事情?在这种情况下,您将相同的列表
a
分配给每个元素,因此当您更改它时,您会看到
a
被引用的所有地方都发生了更改。如果您使用某种复制器构建了列表,那么您就陷入了一个记录良好的问题。原来火箭危险品和胡安帕·阿里维拉加是对的!我使用了一段不同的代码来创建这个列表,它是([([[0,0,0]])*size\ux]*size\uy)。Hoog的代码修复了它。以后,请在发布之前测试您发布的代码。谢谢!这对我有用。事实证明,正如火箭危险品所指出的,我不知何故在同一份清单中多次申报了同一份清单。。。听起来像是虫洞式的数学。使用您最后给出的方法声明它是有效的。
mylist = [[[0 for _ in range(2)] for _ in range(2)] for _ in range(2)]