python - Python 对象的深度复制是否会复制其静态变量?
问题描述
我习惯用 C 和 Java 编写代码,而我刚接触 Python。
我有一个 Class Obj,它有 2 个静态类变量a
和b
2 个实例变量x
和y
. 我有一个 Obj 实例obj
。在程序中,我需要制作obj
(即obj2)的副本,以便obj.x
和obj2.x
不是同一个对象,而是obj.a
同obj2.a
一个对象(相同的指针)。
如果我做了类似的东西obj.a = foo
,那么obj2.a == foo
应该是真的。
我obj2
通过make 创建obj2 = copy.deepcopy(obj)
,但他们没有共享指针,它正在创建另一个实例obj2.a
并使用更多的内存然后需要。
我需要它们像 Java 中的静态变量一样工作。我怎样才能做到这一点?
解决方案
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
推荐阅读
- c++ - 异常处理这是 Nullptr?
- servicestack - 尝试从适配器“NetCoreContainerAdapter”解析服务“System.Boolean”时出错
- php - PHP(Wordpress)中元字段的值求和
- azure - 我们是否有 azure 本机库可以从 java 连接到 redis?
- python - 比较两个熊猫数据框中的两个列
- javascript - 在javascript上存储变量的最佳方法
- r - R dbGetQuery 为 datetime2 字段返回随机值而不是 NULL
- python - TypeError:'int' 对象在 python3.8 中不可下标
- typescript - 如何正确键入 String.prototype.replace 的输入?
- android - 如何将视图定位到 ConstrainLayout 中另一个视图的几乎底部