pop()和append()的问题

时间:2017-02-12 21:12:26

标签: python list append pop

任何帮助将不胜感激!!!

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]]

2 个答案:

答案 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

还要看一下:

How to clone or copy a list?

python: Appending a dictionary to a list - I see a pointer like behavior