所以我的问题是如何通过键获取VALUE而不是获取指针。我有以下代码,我想在没有更改字典中的值的情况下执行tempA。
temp_keys=["a","b","c","d"]
temp_values=[[1,1],[2,2],[3,3],[4,4]]
temp=dict(zip(temp_keys,temp_values))
tempA=temp.get('a',temp.copy())
tempA.append(2)
print temp
输出是:
{'a': [1, 1, 2], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}
查看键“a”的值已更改。
我希望我的变量temp不变,
{'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}
答案 0 :(得分:2)
我相信你正在寻找深刻的副本
import copy
temp_keys=["a","b","c","d"]
temp_values=[[1,1],[2,2],[3,3],[4,4]]
temp=dict(zip(temp_keys,temp_values))
print temp
temp_copy = copy.deepcopy(temp)
temp_copy['a'].append(2)
print temp
您的temp
将保持不变:
{' d':[4,4],' b':[2,2],' c':[3,3],& #39; a':[1,1]} {' d':[4,4], ' b':[2,2],' c':[3,3],' a':[1,1]}
答案 1 :(得分:2)
这里的问题是您的值是列表,这是一个可变结构。为此,您需要copy
>>> temp_keys=["a","b","c","d"]
>>> temp_values=[[1,1],[2,2],[3,3],[4,4]]
>>> temp=dict(zip(temp_keys,temp_values))
到目前为止一切顺利。现在复制返回的值而不是传递的参数
>>> tempA=copy.copy(temp.get('a',temp))
现在输出将按预期进行
>>> tempA.append(2)
>>> print temp
{'a': [1, 1], 'c': [3, 3], 'b': [2, 2], 'd': [4, 4]}
答案 2 :(得分:2)
如果我理解正确,你想要复制字典值,在这种情况下是一个列表,并将一个元素附加到副本。
您可以使用new_list = list(old_list)
或new_list = old_list[:]
复制python中的列表。
# Our dictionary:
my_dict = {'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}
# Copy element a:
new_a = list(my_dict['a'])
new_a.append(2)
print my_dict # {'a': [1, 1], 'b': [2, 2], 'c': [3, 3], 'd': [4, 4]}
print new_a # [1, 1, 2]
答案 3 :(得分:1)
只需更改
tempA=temp.get('a',temp.copy())
到
tempA=temp.get('a').copy()
<强>解释强> 如果您打印密钥的ID&#39; a&#39;无论是字典(原始字典还是复制字典),您都会发现它们在内存中引用相同的位置。因此,一方的改变会影响另一方。
newtemp = dict(temp)
print(id(newtemp.get('a')))
print(id(temp.get('a')))
输出
39274840
39274840