When does Python Create a New Object
python使用名称引用对象。当我们说
1 2 3 4 5 6 | a = [1, 2, 3] b = a a.append(4) print(b) |
将打印
但是,一些操作确实会创建新对象。例如:
1 2 3 4 5 6 | a = 1 b = a a = a + 1 print(b) |
将打印
这个问题并不是这个问题的复制品,因为我特别问在这种情况下对象创建是如何发生的,而另一个问题更普遍地是关于名称共享对象的时间。
我在Luciano Ramalho的书《流畅的Python》中找到了我正在寻找的关于物体创造机制的信息。
Ramalho解释说,虽然
这可以用以下示例加以说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class C(object): def __new__(cls): new_inst = object.__new__(cls) print new_inst.__dict__ new_inst.var_1 = 1 return new_inst def __init__(self): print self.__dict__ self.var_2 = 2 a = C() # Prints: # {} # {'var_1': 1} print a.__dict__ # returns {'var_2': 2, 'var_1': 1} b = C.__new__(C) # Prints: # {} print b.__dict__ # returns {'var_1': 1} b.__init__() # Prints: # {'var_2': 2, 'var_1': 1} print b.__dict__ # returns {'var_2': 2, 'var_1': 1} |
从
这个问题也是相关的。