Python 对象的深度复制会复制其静态变量吗?
Python does deepcopy of an object duplicate its static variables?
我习惯用 C 和 Java 编写代码,而我刚刚进入 Python。
我有一个 Class Obj,它有 2 个静态 class 变量 a
和 b
并且有 2 个实例变量 x
和 y
.我有一个 Obj obj
的实例。在程序中,我需要复制 obj
(即 obj2),以便 obj.x
和 obj2.x
不是同一个对象,但 obj.a
和 obj2.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
我习惯用 C 和 Java 编写代码,而我刚刚进入 Python。
我有一个 Class Obj,它有 2 个静态 class 变量 a
和 b
并且有 2 个实例变量 x
和 y
.我有一个 Obj obj
的实例。在程序中,我需要复制 obj
(即 obj2),以便 obj.x
和 obj2.x
不是同一个对象,但 obj.a
和 obj2.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