任何人都可以帮助我解决奇怪的问题吗?
https://travis-ci.org/ezored/ezored/jobs/322719711
在测试日志中,我打印:
目前的数据: ['旗'] ['旗']
这就是线条:
new_target_data.c_flags.extend(['flag'])
print('Current data:')
print(target_data.c_flags)
print(new_target_data.c_flags)
问题是当我扩展“new_target_data.c_flags”时。相同的数据应用于“target_data.c_flags”。它们是不同的对象,你可以在日志上看到内存参考:
<ezored.models.target_data.TargetData object at 0x2b59c0673590>
<ezored.models.target_data.TargetData object at 0x2b59c0673510>
带有测试代码的文件在这里(方法test_merge_target_data):
https://github.com/ezored/ezored/blob/issue_1/tests/models/test_target.py#L76
有人明白这个问题吗?我做错了什么?
深入研究该代码库,您将找到以下类:
class TargetData(object):
# ...
c_flags = []
# ...
如您所见,c_flags
是此类的类属性。 new_target_data
和target_data
都是这个类的实例,并且预计访问c_flags
将始终生成相同的对象。您应该显示正在变异的实际对象c_flags
,而不是显示两个实例的mem位置
print(id(new_target_data.c_flags))
print(id(target_data.c_flags))
你会发现它们是一样的。