Python 对象的深度复制会复制其静态变量吗?

Python does deepcopy of an object duplicate its static variables?

我习惯用 C 和 Java 编写代码,而我刚刚进入 Python。

我有一个 Class Obj,它有 2 个静态 class 变量 ab 并且有 2 个实例变量 xy.我有一个 Obj obj 的实例。在程序中,我需要复制 obj(即 obj2),以便 obj.xobj2.x 不是同一个对象,但 obj.aobj2.a 是相同的对象(相同的指针)。

如果我做类似obj.a = foo的东西,那么obj2.a == foo应该是真的。

我正在通过创建 obj2 = copy.deepcopy(obj) 创建 obj2,但它们不共享指针,它正在创建另一个实例 obj2.a 并且 使用了比需要更多的内存.

我需要它们像 Java 中的静态变量一样工作。我该怎么做?

Python 有一种处理 classes 静态字段的特定方法。如果您更改通过对象访问的 class 的静态字段,您将仅更改该对象的值。

obj.a = foo # changes the field a only for obj

但是如果您更改通过 class 访问的字段,它将更改此 class 的所有实例的值。

Obj.a = foo # changes the field a for all instances

此外,如果您想比较参考文献,您应该使用 is 关键字

class Dog:
    type="Dog"

a = Dog()
from copy import deepcopy
b = deepcopy(a)
a.type is b.type
>>True
a.type == b.type
>>True
a.type = "Cat"
a.type is b.type
>>False
b.type is Dog.type
>>True