为什么copy.deepcopy不修改对象的id?

use*_*966 2 python deep-copy

我不明白为什么copy.deepcopy不修改对象的id:

import copy
a = 'hello world'
print a is copy.deepcopy(a)  # => True ???
Run Code Online (Sandbox Code Playgroud)

Sim*_*ser 6

Python的实习生弦所以它们是相同的对象(因此相对于使用相同is).这意味着Python只存储同一个字符串对象的一个​​副本(在幕后).

结果copy.deepcopy(a)并不是真正的新对象,因此对字符串对象执行此调用没有意义.


Kev*_*vin 5

Simeon的答案是完全正确的,但我想提供一个更一般的观点.

copy模块主要用于可变对象.我们的想法是制作一个对象的副本,以便您可以在不影响原始对象的情况下对其进行修改.由于制作不可变对象的副本毫无意义,因此模块拒绝这样做.字符串在Python中是不可变的,因此这种优化永远不会影响真实世界的代码.