Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在修改列表实例时,存储对pop的函数调用不返回最后一项?_Python_List - Fatal编程技术网

Python 为什么在修改列表实例时,存储对pop的函数调用不返回最后一项?

Python 为什么在修改列表实例时,存储对pop的函数调用不返回最后一项?,python,list,Python,List,我有以下代码: 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 存储在dpop中的pop方法的实例与您最初拥有的列表实例相关联(您可以在dpop.\uuuu self\uuuu中找到它)

我有以下代码:

 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

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

您保留了对
boundmethod
对象的引用,该对象本身保留了对其实例的引用。有关Python方法的更多信息,请参见cf。

Python中的变量名只是粘贴在对象上的标签。它们不引用内存中的任何固定空间,就像在C中一样。
dpop
是一种绑定方法。原始列表可以通过
dpop.\uuuu self\uuuu
访问.Amber,@SvenMarnach有趣的回答!