问题:
在处理诸如此类的对象时,Python 的赋值行为可能会令人困惑字典。考虑以下代码:
dict_a = dict_b = dict_c = {} dict_c['hello'] = 'goodbye' print(dict_a) print(dict_b) print(dict_c)
预期输出:
{} {} {'hello': 'goodbye'}
实际输出:
{'hello': 'goodbye'} {'hello': 'goodbye'} {'hello': 'goodbye'}
解释:
Python 变量指的是内存中的对象。当您分配 dict_a = dict_b 时,您并不是复制字典对象本身,而是分配对与 dict_b 相同的内存地址的引用。这意味着对一个字典所做的更改将影响所有三个变量,因为它们指向同一个底层对象。
解决方案:
创建一个真实的副本Python 中的对象,需要使用 copy 或 copy.deepcopy 函数。以下代码将创建原始字典的独立副本:
dict_a = dict_b.copy() # Shallow copy dict_a = copy.deepcopy(dict_b) # Deep copy
通过使用这些函数,您可以确保对一个字典所做的更改不会影响其他字典。
以上是Python 赋值是否会创建对象的副本或引用?的详细内容。更多信息请关注PHP中文网其他相关文章!