Python 如果我向一个函数提供一个dict两次,然后在其中一个dict中删除键,出于某种原因,相同的键在第二个dict中被删除。为什么?

Python 如果我向一个函数提供一个dict两次,然后在其中一个dict中删除键,出于某种原因,相同的键在第二个dict中被删除。为什么?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,测试功能: def test_dicts(first_dict, second_dict): print('\nbefore first_dict_:', first_dict) print('before second_dict:', second_dict) del second_dict[2] print('\nafter first_dict_:', first_dict) print('after second_dict:', second_

测试功能:

def test_dicts(first_dict, second_dict):
    print('\nbefore first_dict_:', first_dict)
    print('before second_dict:', second_dict)

    del second_dict[2]

    print('\nafter first_dict_:', first_dict)
    print('after second_dict:', second_dict)
测试数据:

dicts = {1: {11:11}, 2: {22:22}}
让我们测试一下:

>>> tmp.test_dicts(dicts, dicts)

before first_dict_: {1: {11: 11}, 2: {22: 22}}
before second_dict: {1: {11: 11}, 2: {22: 22}}

after first_dict_: {1: {11: 11}}
after second_dict: {1: {11: 11}}

del second\u dict[2]
明确表示要从
second\u dict
中删除该键,但出于某种原因,Python也会从
first\u dict
中删除该键。为什么会这样

让我们试着回答一下

>>> a = "hello"
>>> b = a
>>> bool(id(a) == id(b))
True

因此,即使它们有不同的变量名,它们仍然是同一个对象。

dicts2在哪里以及如何定义??您不显示如何创建
dicts2
。是否有可能是
dicts2=dicts
。在作为第二个论据通过之前,你应该先抄写这篇文章。@efkin,对不起,我弄错了。固定的。应该是同一条格言。8@TitanFighter同一对象可以有零个或多个名称-其中该对象是可变的(如
dict
list
set
等),因为所有名称都指向同一对象,通过任何名称对基础对象所做的任何更改都可以从引用它的任何名称中看到。同意。这个简单的例子让我想起了这个特性。谢谢