对不起,如果这个问题之前已经发布过,但我一直找不到答案。当字典实例化如下。
foo = bar = {'a': 0}
或者...
foo = {'a':0}
bar = foo
更新一个字典会影响另一个字典。
foo['a'] += 1
print(foo)
// {'a': 1}
print(bar)
// {'a': 1}
然而,当它们分别被实例化的时候
foo = {'a':0}
bar = {'a':0}
foo['a'] += 1
print(foo)
// {'a':1}
print(bar)
// {'a':0}
然而,当变量以类似的方式被实例化的时候,
foo = bar = 0
foo += 1
print(foo)
// 1
print(bar)
// 0
首先,这是怎么回事?被设置的变量是否等于同一个字典对象?第二,如何将一个字典复制到另一个变量中,并更新第二个变量而不影响第一个变量?例如,我试图将类似的字典追加到一个列表中,但改变了一个键值。
dic = {"foo":0,"bar":1}
list1 = [1,2,3,4]
list2 = []
for num in list1:
temp = dic
temp["bar"] = num
list2.append(temp)
print(list2)
// [{"foo":0,"bar":4},{"foo":0,"bar":4},{"foo":0,"bar":4},{"foo":0,"bar":4}]
在这个例子中,很容易做到以下几点:
list1 = [1,2,3,4]
list2 = []
for num in list1:
list2.append({'foo':0,'bar':num})
print(list2)
// [{"foo":0,"bar":1},{"foo":0,"bar":2},{"foo":0,"bar":3},{"foo":0,"bar":4}]
但是对于一个有很多键的字典 有什么方法可以在不硬编码一个新字典的情况下做到这一点吗?谢谢你!如果这个问题在以前发过,那就不好意思了。
这是因为当你把可变变量(如包含dict、list等的变量)分配给另一个变量时(或者你把它传递给一个函数),它是通过引用传递的,而不是通过值传递的。这意味着这个变量存储了一个 参考 到对象,而不是实际值。另一方面,像int、str、float等常量是通过value传递的。这意味着要对它们进行复制。如果你想通过值来传递一个可变的项目,你需要用以下方法复制它 copy.deepcopy
像这样。
import copy
my_dict = {"a": 1, "b": 2}
my_copy_dict = copy.deepcopy(my_dict)
现在当你改变 my_dict
到 my_copy_dict
他们都不会同步。