python - Python——如何成功地从一个对象复制数据并更改一个变量而不更改另一个变量?
问题描述
我想做这样的事情:
class test():
def __init__(self):
self.initfunc()
def initfunc(self):
self.a = 'test'
a = test()
b = test()
a = b
a.a = 'test3'
b.a = 'test4'
print(a.a, b.a)
输出是:
test4 test4
我如何做到这一点,以便输出是:
test3 test4
此外,泡菜不是一种选择。这是我在使用 PyQt 时遇到的问题的简化版本,并且 PyQt 中的许多对象都不能腌制。
解决方案
我并不完全清楚你想要实现什么,但之后
a = b
两个名称都指向同一个对象。您可以像这样验证这一点:
a = test()
b = test()
print(id(a), id(b))
a = b
print(id(a), id(b))
在其他语言中,您可能将其称为“通过引用分配”。分配test4
给之后b.a
,a.a
当然是相同的值,因为它们是同一对象的相同属性。
注意:原件a
在分配后不再可访问。
你可能会得到你需要的东西copy.copy()
:
b = test()
print(id(a), id(b))
a = copy(b)
print(id(a), id(b))
a.a = 'test3'
b.a = 'test4'
print(a.a, b.a)
但鉴于您对 的评论pickle
,您可能必须实现__copy__()
or__deepcopy__()
方法。
推荐阅读
- python - 如何将嵌套的 JSON 值返回到字典?
- c - 如果没有线程被锁定,如何销毁互斥锁?
- blockchain - 使用 Solidity 中的 hexdata 从已部署的合约 abc 调用已部署的合约 xyz 公共应付款功能
- c# - C# 链表对值进行排序并将 int 插入正确的位置
- javascript - 等待一次提取完成,然后再开始下一次提取
- angular - Angular 5.x 页面加载或模块本身的初始化需要更长的时间
- php - 使用一个 SQL 字符串的行数
- python - COLAB 错误:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出
- android - React-native 无法编译运行
- sql - 验证只存在一个值