首页 > 解决方案 > Python 对象的深度复制是否会复制其静态变量?

问题描述

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

我有一个 Class Obj,它有 2 个静态类变量ab2 个实例变量xy. 我有一个 Obj 实例obj。在程序中,我需要制作obj(即obj2)的副本,以便obj.xobj2.x不是同一个对象,而是obj.aobj2.a一个对象(相同的指针)。

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

obj2通过make 创建obj2 = copy.deepcopy(obj),但他们没有共享指针,它正在创建另一个实例obj2.a使用更多的内存然后需要

我需要它们像 Java 中的静态变量一样工作。我怎样才能做到这一点?

标签: pythonstaticstatic-variables

解决方案


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

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

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

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

推荐阅读