任何帮助将不胜感激!!!
res = []
s = [1,2,3,4,5,6]
s.pop()
res.append(s)
print res
s.pop()
res.append(s)
print res
上面的python代码给出了以下结果
[[1, 2, 3, 4, 5]]
[[1, 2, 3, 4], [1, 2, 3, 4]]
我不明白为什么pop会影响res。我的意思是打印结果应该是
[[1,2,3,4,5]]
[[1,2,3,4,5],[1,2,3,4]]
答案 0 :(得分:0)
Python中的每个值都是对象的引用(指针)。 赋值总是复制值(这是一个指针);两个这样的 因此,指针可以指向同一个对象。
要获得所需的结果,您需要复制初始列表:
res = []
s = [1,2,3,4,5,6]
s.pop()
res.append(s[:])
print(res)
s.pop()
res.append(s[:])
print(res)
使用list.copy()
函数可以完成同样的操作:
...
res.append(s.copy())
...
输出:
[[1, 2, 3, 4, 5]]
[[1, 2, 3, 4, 5], [1, 2, 3, 4]]
答案 1 :(得分:0)
这没关系 - 因为res将保存与s相同的引用(对于同一个对象 - 在本例中为数组)。
要解决此问题,请使用此选项:
res = []
s = [1,2,3,4,5,6]
s.pop()
res.append(list(s))
print res
s.pop()
res.append(list(s))
print res
还要看一下:
python: Appending a dictionary to a list - I see a pointer like behavior