python 实现把一维的序列循环赋值给二维的序列问题,求助

python 实现把一维的序列循环赋值给二维的序列问题,求助

a = [0,0,0,0]
b = []

for i in range(4):

a[3] = i
b.append(a)

print b

想实现的是:
[[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 2], [0, 0, 0, 3]]

可是实际是:
[[0, 0, 0, 3], [0, 0, 0, 3], [0, 0, 0, 3], [0, 0, 0, 3]]

求问哪里有问题?

阅读 1.4k
1 个回答

在 python 中,对 list 的拷贝大多数情况是指针拷贝,或者说叫引用。

也就是说,当你每次执行 b.append(a) 的时候,b 的末尾都是放的 a(而不是 a 的拷贝);到循环结束后,b 的 4 个元素都是 a,而 a 的值是 [0, 0, 0, 3],所以你看到的 b 中全都是 [0, 0, 0, 3]

解决办法是创造一个新的 list 给 b。这个具体做法有很多,留给你思考吧

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题