python中两个不同对象中的重复数据

问题描述 投票:-1回答:1

任何人都可以帮助我解决奇怪的问题吗?

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

有人明白这个问题吗?我做错了什么?

python memory duplicates
1个回答
1
投票

深入研究该代码库,您将找到以下类:

class TargetData(object):
    # ...
    c_flags = []
    # ...

如您所见,c_flags是此类的类属性。 new_target_datatarget_data都是这个类的实例,并且预计访问c_flags将始终生成相同的对象。您应该显示正在变异的实际对象c_flags,而不是显示两个实例的mem位置

print(id(new_target_data.c_flags))
print(id(target_data.c_flags))

你会发现它们是一样的。

© www.soinside.com 2019 - 2024. All rights reserved.