python - 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)
我的问题是:
- 这是因为 numpy 数组(深拷贝)的属性吗?
- 除非我明确修改它们,否则有没有办法“修复”对象属性?
解决方案
这是那些奇怪的参考与价值问题之一。
因为 self 是一个引用,所以您的测试变量是对 self.init_value 的引用...
所以你正在修改属性。@matfux 的解决方案让您的变量存储 self.init_value 的副本,而不是对其的引用。
老实说,在大多数 OOP 情况下,这有点棘手。
推荐阅读
- javascript - 未处理的承诺拒绝,但没有明显的异步代码
- azure-functions - Azure Functions 的全局异常处理程序
- vscode-remote - 连接远程扩展主机服务器失败
- javascript - Kendo UI 列表视图 - 在编辑时切换模型实例
- c# - 2019 年 1 月 5 日之后的日语日期时间格式
- wordpress - 嵌套循环和 ACF 关系查找中的 Wordpress 条件
- excel - 在具有特定主题的新电子邮件后触发宏
- java - 当 spring 调用 get(Object o, Class
aClass) 使用@Cacheable 时的函数 - r - 如何使用用户选择的因子变量聚合预加载的数据集?
- python - 如何使用 argparse 删除 CLI 参数,以便 unittest 接受 arg list