首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python列表初始化和修改产生两种不同的结果

Python列表初始化和修改产生两种不同的结果
EN

Stack Overflow用户
提问于 2021-01-11 17:21:31
回答 1查看 21关注 0票数 0

这是我的代码:

代码语言:javascript
复制
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)

这是输出:

代码语言:javascript
复制
[[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方法却给了我错误的答案?两者都产生相同的二维数组,但当我试图修改它时,我得到了两个不同的结果!

EN

回答 1

Stack Overflow用户

发布于 2021-01-11 17:25:26

区别在于:

代码语言:javascript
复制
y2 = [foo() for _ in range(3)]

等同于:

代码语言:javascript
复制
y2 = [foo(), foo(), foo()]

即,每次都会重新计算该表达式。鉴于:

代码语言:javascript
复制
y1 = [foo()] * 3

等同于:

代码语言:javascript
复制
x = foo()
y1 = [x, x, x]

在您的例子中,您创建的是一个新的列表,而不是foo()。因此,在第一种情况下,你会得到不同的内部列表,而在第二种情况下,你会得到相同的内部列表,在外部列表中会被多次引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65664137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档