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]]
求问哪里有问题?
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]]
求问哪里有问题?
4 回答4.5k 阅读✓ 已解决
1 回答3.4k 阅读✓ 已解决
4 回答3.9k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
2 回答500 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
在 python 中,对 list 的拷贝大多数情况是指针拷贝,或者说叫引用。
也就是说,当你每次执行
b.append(a)
的时候,b 的末尾都是放的 a(而不是 a 的拷贝);到循环结束后,b 的 4 个元素都是 a,而 a 的值是[0, 0, 0, 3]
,所以你看到的 b 中全都是[0, 0, 0, 3]
。解决办法是创造一个新的 list 给 b。这个具体做法有很多,留给你思考吧