如何解决在python中用组合存储属性两次-内存效率低下吗?
我有一个类似下面的类结构,
class binomial():
def __init__(self,theta):
self.theta = theta
class beta_binomial():
def __init__(self,theta,beta):
self.b = binomial(theta)
self.theta = self.b.theta
self.beta = beta
我喜欢这种结构,因为我可以使用以下内容直接访问theta
和beta
,
bb = beta_binomial(np.array([0.5,0.5,0.3,0.3]),np.array([0.35,0.15,0.53,0.83]))
bb.theta,bb.beta
但是,我想知道这是否会导致内存效率低下,因为theta
既是binomial
和beta_binomial
的属性。换句话说,bb.theta
和bb.b.theta
返回相同的内容。我知道Python做了一些聪明的事情来减少这样的低效率,但是我不确定它是否适用于此。如果theta
是一个非常大的数组(可以是),可能会很重要。
解决方法
将theta
作为实例属性存储,而不是将其作为属性。
class beta_binomial:
def __init__(self,theta,beta):
self.b = binomial(theta)
self.beta = beta
@property
def theta(self):
return self.b.theta
这会减少每个实例的内存,但会以稍慢的访问为代价。
,否,除了可以忽略的重复引用开销(如果您有很多实例,它们可能会堆积起来)之外,这并不是内存不足的问题。可以使用id()函数来查看bb.theta
和bb.b.theta
具有相同的内存地址。
bb = beta_binomial(np.array([0.5,0.5,0.3,0.3]),np.array([0.35,0.15,0.53,0.83]))
id(bb.theta) == id(bb.b.theta)
返回true
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。