我有以下代码:
d = [1,2,3,4]
dpop = d.pop
d = ["A","B","C"]
dpop() # return 4
d.pop() #return C
那么,为什么我的第一个名单仍然存在?在哪里?
答案 0 :(得分:8)
第一个列表存在,因为dpop
所指向的方法对象保留了对它的引用。
基本上,你所做的就是:
dpop = [1,2,3,4].pop
您存储在pop
中的dpop
方法的实例与您最初拥有的列表实例相关联(您可以在dpop.__self__
中找到它)。
答案 1 :(得分:2)
您保留对boundmethod
对象的引用,该对象本身保留对其实例的引用。有关Python方法的更多信息,请参阅https://wiki.python.org/moin/FromFunctionToMethod。