2

我有以下代码:

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

为什么我的第一个列表中定义的列表仍然存在,它存在于哪里?

4

2 回答 2

8

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

本质上,您所做的是:

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

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

于 2013-10-08T14:54:21.793 回答
2

您保留对boundmethod对象的引用,该对象本身保留对其实例的引用。cf https://wiki.python.org/moin/FromFunctionToMethod了解更多关于 Python 方法的真正含义。

于 2013-10-08T14:58:33.723 回答