这是我的代码:
n = 5
r = 6
C1 = [[0 for x in range(r+1)] for x in range(n+1)]
print(C1)
print()
C1[4][3] = 4
print(C1)
print()
print()
C2 = [[0] * (r+1)] * (n+1)
print(C2)
print()
C2[4][3] = 4
print(C2)这是输出:
[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
[[0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0]]
[[0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0], [0, 0, 0, 4, 0, 0, 0]]为什么当我使用'for-range‘方法时,我得到了正确的答案,而[]*n方法却给了我错误的答案?两者都产生相同的二维数组,但当我试图修改它时,我得到了两个不同的结果!
发布于 2021-01-11 17:25:26
区别在于:
y2 = [foo() for _ in range(3)]等同于:
y2 = [foo(), foo(), foo()]即,每次都会重新计算该表达式。鉴于:
y1 = [foo()] * 3等同于:
x = foo()
y1 = [x, x, x]在您的例子中,您创建的是一个新的列表,而不是foo()。因此,在第一种情况下,你会得到不同的内部列表,而在第二种情况下,你会得到相同的内部列表,在外部列表中会被多次引用。
https://stackoverflow.com/questions/65664137
复制相似问题