我正在观看探索python。它有一个例子:
>>> d1 = {'name': 'ethan', 'books': ['book1', 'book2', 'book3']}
>>> d2 = d1.copy()
>>> d2['name'] = 'peter'
>>> d2
{'books': ['book1', 'book2', 'book3'], 'name': 'peter'}
>>> d1
{'books': ['book1', 'book2', 'book3'], 'name': 'Ethan'}
dict不是价值关键对象吗?为什么它说name的值是一个不可变对象,所以d1的属性不会改变。
答案 0 :(得分:0)
因为为了使查找更快,python为字典的每个键计算哈希值。如果密钥对象从某个其他类更改,但不知道它被用作字典中的键,则不会通知字典,并且会在后续查找中在错误的位置查找它。
答案 1 :(得分:0)
字典copy
方法显式创建副本。这与可变性无关。尝试
d2=d1
看看你的期望。此外,对象是可变的意味着你无法改变它。尝试更改元组,例如:
x=(1,2,3)
x[0]=4
注意 - 这与其他变量无关。事实上,试试:
(1,2,3)[0]=4
小编辑
d1
的副本很浅,意味着books
的列表只复制了它的引用。因此,改变列表,所有指向它的东西都会被看到 - 两者都是。请注意,列表已更改,而不是dicts。