PYTHON for 循环给二维数组赋值

lym152898 2016-07-02 02:39:59
a = [[0,0]] * 5
for i in range(5):
a[i][1] = i

本以为出来结果是[[0,0],[0,1],[0,2],[0,3],[0,4]],可是实际结果却是[[0,4],[0,4],[0,4],[0,4],[0,4]],这是为什么?
...全文
10234 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39466020 2020-04-14
  • 打赏
  • 举报
回复
谢谢,,,,,
Stone Alone 2019-11-08
  • 打赏
  • 举报
回复
十分感谢,懂了
lym152898 2016-08-09
  • 打赏
  • 举报
回复
十分感谢,懂了
sanxiaochengyu 2016-07-03
  • 打赏
  • 举报
回复
以前还没发现这个问题。 经验证,发现问题出在“*”上,*应该是拷贝了5个引用(想象一下指针),每个对象指向同一块内容。 所以只要改变其中任何一个内容,其它几个内容都会改变

a = [[0, 0] for _ in range(5)]
b = [[0, 0]] * 5
print("old a=", a)
print("old b=", a)
for i in range(5):
    a[i][1] = i
b[0][1] = 1
# for i in range(5):
#     b[i][1] = i
print("new a=", a)
print("new b=", b)

输出:
old a= [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
old b= [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
new a= [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4]]
new b= [[0, 1], [0, 1], [0, 1], [0, 1], [0, 1]]

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧