浅复制和深复制

### Python 中浅复制深复制的区别 在 Python 编程中,对象的复制分为浅复制(shallow copy深复制(deep copy),两者的主要区别在于处理嵌套对象的方式不同。 #### 浅复制 浅复制创建一个新的复合对象,然后将原始对象中的元素引用插入到新对象中。这意味着对于不可变类型的元素,两个对象共享相同的实例;而对于可变类型的元素,则只复制最外层的对象引用,内部对象仍然指向同一内存位置[^1]。 ```python import copy original_list = [[1, 2], [3, 4]] shallow_copied_list = copy.copy(original_list) print(shallow_copied_list) # 输出: [[1, 2], [3, 4]] # 修改原列表的第一个子列表 original_list[0][0] = 'changed' print(original_list) # 输出: [['changed', 2], [3, 4]] print(shallow_copied_list) # 输出: [['changed', 2], [3, 4]] # 子列表受到影响 ``` #### 深复制 相比之下,深复制不仅复制了外部容器本身,还递归地复制了所有嵌入其中的对象,从而使得源数据与目标数据之间没有任何依赖关系。因此,在修改任意一方的数据时,另一方保持不变[^3]。 ```python import copy original_dict = {'numbers': [1, 2, 3]} deep_copied_dict = copy.deepcopy(original_dict) print(deep_copied_dict) # 输出: {'numbers': [1, 2, 3]} # 修改原字典内的列表 original_dict['numbers'][0] = 'modified' print(original_dict) # 输出: {'numbers': ['modified', 2, 3]} print(deep_copied_dict) # 输出: {'numbers': [1, 2, 3]} # 不受原字典的影响 ``` #### 使用场景 当只需要拷贝顶层结构而不关心底层内容是否一致时可以选择使用 `copy()` 方法来执行浅复制;如果希望得到一个完全独立于原有变量的新副本,则应该调用 `deepcopy()` 函数来进行深复制[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值