一个奇怪的列表行为

时间:2013-10-08 14:52:45

标签: python list pop

我有以下代码:

 d = [1,2,3,4] 
 dpop = d.pop 
 d = ["A","B","C"]
 dpop() # return 4 
 d.pop() #return C

那么,为什么我的第一个名单仍然存在?在哪里?

2 个答案:

答案 0 :(得分:8)

第一个列表存在,因为dpop所指向的方法对象保留了对它的引用。

基本上,你所做的就是:

dpop = [1,2,3,4].pop

您存储在pop中的dpop方法的实例与您最初拥有的列表实例相关联(您可以在dpop.__self__中找到它)。

答案 1 :(得分:2)

您保留对boundmethod对象的引用,该对象本身保留对其实例的引用。有关Python方法的更多信息,请参阅https://wiki.python.org/moin/FromFunctionToMethod