Python更新不同的变量而不是指定的引用变量

Python更新不同的变量而不是指定的引用变量,python,string,class,dictionary,append,Python,String,Class,Dictionary,Append,解决方案:test\u dict=copy.deepcopy(dict) 谢谢你们,我的玩家们。愿调试的轻松让您在未来更加愉快 我创建了一个字典的副本,将更改附加到新变量中。 更改将显示在旧变量中 CHARACTERS = ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A'] DICT = {'key1': "foo", 'key2': "bar", 'key3': CHARACTERS}

解决方案:
test\u dict=copy.deepcopy(dict)
谢谢你们,我的玩家们。愿调试的轻松让您在未来更加愉快

我创建了一个字典的副本,将更改附加到新变量中。 更改将显示在旧变量中

CHARACTERS = ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A']
DICT = {'key1': "foo", 'key2': "bar", 'key3': CHARACTERS}

def test(self):
    test_dict = DICT.copy()  # first reference of 'test_dict'
    print("DICT before", DICT)
    test_dict['sequence'] += ['G']
    print("DICT after ", DICT)
输出:

DICT before {'key1': "foo", 'key2': "bar", 'key3': ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A']}
DICT after  {'key1': "foo", 'key2': "bar", 'key3': ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A', 'G']}
字母“G”附在DICT和test_DICT之后

如果你问我的话,我觉得很恐怖


更新:我尝试了建议的:
test\u dict=dict.copy()
,但没有成功。上面更新的代码中包含此内容,我做错了什么?

您不创建副本,而是创建引用。两个变量都指向相同的内存。如果要创建不改变“原件”的精确副本,应使用
test\u dict=dict.copy()
。这将创建一个浅层副本(不复制嵌套的目录/列表)。要解决这个问题,需要一个深度拷贝。获取的一种方法是使用
copy
模块中的
copy.deepcopy
函数

导入副本
字符=['A','G','T','C','A','G','T','G','T','A','A']
DICT={'key1':'foo','key2':'bar','key3':字符}
def test():
test_dict=copy.deepcopy(dict)#“test_dict”的第一个参考
打印(“之前的口述”,口述)
测试指令['key3']+=['G']
打印(“记录后”,记录)
测试()
这将产生预期的结果:

DICT before {'key1': 'foo', 'key2': 'bar', 'key3': ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A']}
DICT after  {'key1': 'foo', 'key2': 'bar', 'key3': ['A', 'G', 'T', 'C', 'C', 'A', 'G', 'T', 'G', 'T', 'A', 'A']}

我知道这和指针有关!我有一个ASM和C++的背景,但是Python是高级的,它处理所有这些概念,但是我只是尝试了“TestPosiDist= Dig.Copy.()”,但没有运气;(我的错,我会在一秒钟内编辑答案,你需要创建深度副本(也复制嵌套的内容)请检查编辑的答案,希望这能解决你的问题