Python 在双零列表中分配随机数

Python 在双零列表中分配随机数,python,python-2.7,Python,Python 2.7,我有以下python代码: #-*-coding:cp1252-*- from random import randint matriz = [[0] * 5] * 5 print matriz for i in range(5): for j in range(5): numero = randint(0,10) matriz[i][j] = numero for i in matriz: print i 为什么所有的行都是一样的 例如

我有以下python代码:

#-*-coding:cp1252-*-
from random import randint

matriz = [[0] * 5] * 5
print matriz
for i in range(5):
    for j in range(5):
        numero = randint(0,10)
        matriz[i][j] = numero

for  i in matriz:
     print i
为什么所有的行都是一样的

例如,生成一个随机双列表:

[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]
[0, 5, 1, 0, 10]

谢谢。

这归因于Python如何处理变量,当您执行
matriz=[[0]*5]*5
时,列表
matriz
中的每个元素都是指向内存中相同列表的指针


要完成您想要做的事情,请使用这个
matriz=[[0]*5 for n in xrange(5)]
,这样每个子列表在内存中都是它自己的列表。

这归因于Python如何处理变量,当您执行
matriz=[[0]*5]*5
时,列表
matriz
的每个元素都是指向内存中相同列表的指针


要完成您想要做的事情,请使用此
matriz=[[0]*5 for n in xrange(5)]
,以便每个子列表在内存中都是自己的列表。

您的矩阵包含对同一列表的5个引用。避免这种情况的最短方法是按照以下思路进行嵌套理解:

> m = [[random.randint(1,10) for _ in xrange(5)] for _ in xrange(5)]
> m
[[9, 4, 4, 10, 10], [1, 2, 4, 3, 5], [3, 4, 8, 9, 10], [5, 9, 4, 3, 3], [3, 3, 8, 6, 7]]

您的矩阵包含对同一列表的5个引用。避免这种情况的最短方法是按照以下思路进行嵌套理解:

> m = [[random.randint(1,10) for _ in xrange(5)] for _ in xrange(5)]
> m
[[9, 4, 4, 10, 10], [1, 2, 4, 3, 5], [3, 4, 8, 9, 10], [5, 9, 4, 3, 3], [3, 3, 8, 6, 7]]

这是一个副本,但我没有时间找到它。这是因为您正在创建初始列表的5个副本[0]*5是一个列表,然后会被复制5次答案提示将在matriz:print id(i)中为i运行
。。。matriz中的所有条目都是对同一对象的引用非常感谢这是重复的,但我没有时间找到它。这是因为您正在创建初始列表的5个副本[0]*5是一个列表,然后会被复制5次答案提示将在matriz:print id(i)
中为i运行
。。。matriz中的所有条目都是对同一对象的引用非常感谢非常感谢Brian非常感谢Brian