<分区>
我读到 python 中的赋值并不像在 c 中那样复制它,在 c 中它分配一个指向对象的指针。
但是当我调试这个函数时:
def popall(self):
objs = self.curstack
self.curstack = []
return objs
看起来像是在进行某种复制。此函数运行后 obis 充满了东西,而 self.curstack
是空的......
所以一些复制正在进行中。是深还是浅?
<分区>
我读到 python 中的赋值并不像在 c 中那样复制它,在 c 中它分配一个指向对象的指针。
但是当我调试这个函数时:
def popall(self):
objs = self.curstack
self.curstack = []
return objs
看起来像是在进行某种复制。此函数运行后 obis 充满了东西,而 self.curstack
是空的......
所以一些复制正在进行中。是深还是浅?
最佳答案
它不复制任何东西。只是分配给 self.curstack
不会修改任何 self.curstack
用来引用。它只是让 self.curstack
引用其他东西。
这样想。 self.curstack
指向一些东西。使用 objs = self.curstack
你可以让 objs
指向相同的东西。使用 self.curstack = []
,您可以使 self.curstack
指向一个空列表。这不会删除 self.curstack
过去指向的任何内容;那东西还在那里,objs
仍然指向它。
This article使用标签标记的一个很好的类比来解释它。
关于python - python是否在分配时复制对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27812789/