Python 笔记 — 赋值和深浅拷贝

一、赋值(Assignment)

赋值是指创建一个变量名,使其引用原始对象。换句话说,赋值操作只是创建了一个指向原对象的新引用,而不会创建新的对象。

original_list = [1, 2, 3]
new_list = original_list

new_list[0] = 5

print(original_list)  # [5, 2, 3],原始列表被修改了
print(new_list)  # [5, 2, 3]

new_list 被赋值为 original_list,它们引用了同一个列表对象,所以修改 new_list 也会影响 original_list

二、浅拷贝(Shallow Copy)

浅拷贝是指创建一个新对象,然后将原始对象中的元素复制到新对象中。但是,新旧对象中的元素引用相同的内存地址,即复制的是元素的引用而不是元素本身。

在 Python 中,可以使用copy()方法或者切片操作来进行浅拷贝,浅拷贝适用于简单的数据结构。

import copy

original_list = [1, 4]
new_list = copy.copy(original_list)

new_list[1] = 5

print(original_list)  # [1, 4]
print(new_list)  # [1, 5]

但对于嵌套的结构,如果原始对象包含嵌套对象(如列表中的列表),则新旧对象中的嵌套对象引用相同的内存地址。

import copy

original_list = [1, [2, 3], 4]
shallow_copied_list = copy.copy(original_list)

shallow_copied_list[1][0] = 5

print(original_list)  # [1, [5, 3], 4],原始列表被修改了
print(shallow_copied_list)  # [1, [5, 3], 4]

shallow_copied_list 是通过浅拷贝创建的,但是它和 original_list 共享内部嵌套列表的引用,所以修改嵌套列表会影响两个列表。

三、深拷贝(Deep Copy)

深拷贝是指创建一个新对象,并递归复制原始对象中的所有嵌套对象及其内容,使得新对象和原始对象彼此独立,互不影响。

在 Python 中,可以使用 copy 模块deepcopy()函数来执行深拷贝操作。深拷贝适用于包含复杂嵌套结构的数据,确保各个嵌套层次的对象都是独立的。

import copy

original_list = [1, [2, 3], 4]
deep_copied_list = copy.deepcopy(original_list)

deep_copied_list[1][0] = 5

print(original_list)  # [1, [2, 3], 4],原始列表未受影响
print(deep_copied_list)  # [1, [5, 3], 4]

深拷贝创建了一个新的列表对象,包括内部嵌套列表也被完全复制,因此对 deep_copied_list 的修改不会影响 original_list

四、总结

  • 赋值是创建一个新的引用,两个引用指向同一个对象。
  • 浅拷贝是创建一个新对象,但对于嵌套对象,新旧对象中的嵌套对象引用相同。
  • 深拷贝是创建一个新对象,并递归地复制嵌套对象,确保新对象和原始对象相互独立。

选择使用浅拷贝还是深拷贝取决于需求和数据结构的复杂性。对于嵌套层次很深的结构,深拷贝可能会消耗更多的内存和性能,所以要根据实际情况做出选择。

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值