我有以下代码:
d = [1,2,3,4]
dpop = d.pop
d = ["A","B","C"]
dpop() # return 4
d.pop() #return C
为什么我的第一个列表中定义的列表仍然存在,它存在于哪里?
第一个列表之所以存在,是因为指向它的方法对象保留了对它的引用dpop
。
本质上,您所做的是:
dpop = [1,2,3,4].pop
pop
您存储的方法dpop
的实例与您最初拥有的列表的实例相关联(您可以在 中找到它dpop.__self__
)。
您保留对boundmethod
对象的引用,该对象本身保留对其实例的引用。cf https://wiki.python.org/moin/FromFunctionToMethod了解更多关于 Python 方法的真正含义。