如何解决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
来创建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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。