我创建了一个具有如下代码所示属性的类,然后我构建了一个electron对象,为了不重新定义整个对象,我做了positron = electron
,然后更改了它的name属性。问题是这两个对象似乎“像C++一样”指向对方一个对象属性的任何更改都会跟随第二个对象属性的任何更改,因此如何将一个对象的独立副本独立复制到不同的内存空间中
守则:
class particule():
def __init__(self,name,Mass,TotaleEnergy=None):
super().__init__()
self.name=name
self.mass=Mass
self.energy=(TotaleEnergy if TotaleEnergy!=None else self.mass)
electron=particule("e-",0.511)
positron=electron ; electron.name="e+"
print(positron.name , electron.name)#I get e+,e+
您可以使用复制模块中的deepcopy,该模块将创建一个与电子相同的新对象,并使用不同的id存储在正电子中
因为当你做正电子=电子的时候,它创建了一个物体电子的相同副本,并且它指向内存中与另一个物体相同的位置,所以如果你改变其中一个物体的属性,它将反映另一个物体
您所做的被称为浅拷贝,只是Python的工作方式Here is a link with documentation/explanation.以下是该网站的定义
我的简短tl;dr解释。
名为
electron
的变量指向一个特定的内存位置,我们称之为abcd1234
设置
positron=electron
时,只需将positron
变量名指向与electron
相同的内存位置(abcd1234
)如何解决此问题
或者实例化一个单独的对象
或
使用
copy
库避免意外的浅拷贝Here is another link for reference
希望这有帮助强>
Python是一种引用调用语言,因此每当您执行
positron = electron
时,它基本上会创建一个引用相同元素的新指针。因此,如果对其中任何一个对象进行更改,它们都将反映在这两个对象中。你们需要做的是,在这种情况下,你们使用的是一个类,所以若正电子要继承电子的属性,你们可以创建一个子类或者任何适合层次结构的类相关问题 更多 >
编程相关推荐