首页 > 解决方案 > python对象属性修改

问题描述

这对我来说真的很令人惊讶(而且在调试时间方面代价高昂):

class Test():
    def __init__(self):
        self.init_value = np.array([1, 2])
    
    def func(self):
        test = self.init_value
        test[-1] = 0
        return test
test = Test()
print(test.init_value)
test.func()
print(test.init_value)

我的问题是:

  1. 这是因为 numpy 数组(深拷贝)的属性吗?
  2. 除非我明确修改它们,否则有没有办法“修复”对象属性?

标签: pythonnumpyclassobjectattributes

解决方案


这是那些奇怪的参考与价值问题之一。

因为 self 是一个引用,所以您的测试变量是对 self.init_value 的引用...

所以你正在修改属性。@matfux 的解决方案让您的变量存储 self.init_value 的副本,而不是对其的引用。

老实说,在大多数 OOP 情况下,这有点棘手。


推荐阅读