【发布时间】:2019-07-10 11:31:54
【问题描述】:
我正在为特定目的(这次是partilce模拟)创建某个类,当我使用该类声明两个不同的对象时,它们本身共享不同的内存地址,但它们的属性共享相同的地址,这导致修改它们中的任何一个修改其他的,有什么帮助吗?我被卡住了。
代码逻辑错误块:
# Particle is the class
particle1 = Particle(m = 2)
particle2 = Particle(m = 4)
# object.S is an atrribute
particle1.S[1]=np.array([0,1,32])
particle2.S[1]=np.array([2,0,3])
hex(id(particle1.S))==hex(id(particle2.S)) # returns True
这里是构造函数:
def __init__(self, m = 0, Q = 0, initS = np.array([[0,0,0],[0,0,0],[0,0,0]]) ):
self.initS = initS
self.S = self.initS
self.m = m; self.t = 0
self.charge = Q
【问题讨论】:
-
请出示构造函数。您创建的 S 可能在对象中是通用的(例如,您有一个可变的默认值)。
-
完成,构造函数已添加。
-
是的,
initS有一个可变的默认参数;正如 h4z3 所期望的那样。没有显式传递initS值而创建的所有实例共享同一个 NumPy 数组。
标签: python class object memory