python会在赋值时复制对象吗?

use*_*342 1 python copy assign

我读到 python 中的赋值不会像在 c 中那样复制它,它会为对象分配一个指针。

但是当我调试这个函数时:

def popall(self):
    objs = self.curstack
    self.curstack = []
    return objs
Run Code Online (Sandbox Code Playgroud)

看起来正在进行某种复制。这个函数运行后obis满是东西,self.curstack是空的……

所以一些副本正在进行中。它是深的还是浅的?

Bre*_*arn 6

它不会复制任何东西。只是分配给self.curstack不会修改self.curstack用于引用的任何内容。它只是让self.curstack参考别的东西。

这么想吧。 self.curstack指向一些东西。和objs = self.curstackobjs一起指出同样的东西。使用self.curstack = [],您可以self.curstack指向一个空列表。这不会删除任何self.curstack曾经指向的东西;那东西还在那里,objs还在指向它。

本文使用标签标签的一个很好的类比来解释它。