【编程小白必看】Python深拷贝和浅拷贝操作秘籍一文全掌握

【编程小白必看】Python深拷贝和浅拷贝操作秘籍🔥一文全掌握



前言

嘿,小伙伴们!今天我们要聊聊 Python 中一个非常重要的概念——深拷贝和浅拷贝。这两个概念听起来可能有些抽象,但其实它们在日常编程中非常重要。跟着我一起,让我们揭开深拷贝和浅拷贝的神秘面纱吧!


一、什么是深拷贝和浅拷贝?

在 Python 中,当我们复制一个对象时,通常有两种方式:浅拷贝(shallow copy)和深拷贝(deep copy)。这两种方式的区别在于如何处理对象中的可变子对象。
1.浅拷贝:只复制对象的第一层,对于对象中的可变子对象,只是复制了它们的引用。
2.深拷贝:不仅复制对象的第一层,还会递归地复制所有子对象。

二、浅拷贝 vs 深拷贝

为了更好地理解浅拷贝和深拷贝的区别,我们先来看一些具体的例子。

1.浅拷贝

浅拷贝只复制对象的第一层,对于对象中的可变子对象,只是复制了它们的引用。

代码如下(示例):

import copy

# 创建一个列表
original_list = [[1, 2], [3, 4]]

# 浅拷贝
shallow_copy = copy.copy(original_list)

# 修改原始列表中的子列表
original_list[0].append(5)

# 输出原始列表和浅拷贝后的列表
print("Original List:", original_list)  # 输出 [[1, 2, 5], [3, 4]]
print("Shallow Copy:", shallow_copy)    # 输出 [[1, 2, 5], [3, 4]]

在这个例子中,虽然我们对 original_list 进行了修改,但是 shallow_copy 也发生了变化。这是因为浅拷贝只复制了第一层列表,
对于子列表 [1, 2] 和 [3, 4],只是复制了它们的引用。

2.深拷贝

深拷贝不仅复制对象的第一层,还会递归地复制所有子对象。

代码如下(示例):

import copy

# 创建一个列表
original_list = [[1, 2], [3, 4]]

# 深拷贝
deep_copy = copy.deepcopy(original_list)

# 修改原始列表中的子列表
original_list[0].append(5)

# 输出原始列表和深拷贝后的列表
print("Original List:", original_list)  # 输出 [[1, 2, 5], [3, 4]]
print("Deep Copy:", deep_copy)          # 输出 [[1, 2], [3, 4]]

在这个例子中,虽然我们对 original_list 进行了修改,但是 deep_copy 没有发生变化。这是因为深拷贝递归地复制了所有子对象。

三、深拷贝和浅拷贝的应用场景

深拷贝和浅拷贝在实际开发中有很多应用场景。下面是一些常见的例子。

1.字典的拷贝

字典也可以进行浅拷贝和深拷贝。

代码如下(示例):

import copy

# 创建一个字典
original_dict = {'key1': [1, 2], 'key2': [3, 4]}

# 浅拷贝
shallow_copy = copy.copy(original_dict)

# 深拷贝
deep_copy = copy.deepcopy(original_dict)

# 修改原始字典中的子列表
original_dict['key1'].append(5)

# 输出原始字典和拷贝后的字典
print("Original Dict:", original_dict)  # 输出 {'key1': [1, 2, 5], 'key2': [3, 4]}
print("Shallow Copy:", shallow_copy)    # 输出 {'key1': [1, 2, 5], 'key2': [3, 4]}
print("Deep Copy:", deep_copy)          # 输出 {'key1': [1, 2], 'key2': [3, 4]}

在这个例子中,浅拷贝和深拷贝的效果与列表类似。

2.对象的拷贝

对于自定义的对象,也可以进行浅拷贝和深拷贝。

代码如下(示例):

import copy

class MyClass:
    def __init__(self, data):
        self.data = data

# 创建一个对象
original_obj = MyClass([1, 2])

# 浅拷贝
shallow_copy = copy.copy(original_obj)

# 深拷贝
deep_copy = copy.deepcopy(original_obj)

# 修改原始对象中的子列表
original_obj.data.append(3)

# 输出原始对象和拷贝后的对象
print("Original Obj Data:", original_obj.data)  # 输出 [1, 2, 3]
print("Shallow Copy Data:", shallow_copy.data)  # 输出 [1, 2, 3]
print("Deep Copy Data:", deep_copy.data)        # 输出 [1, 2]

在这个例子中,浅拷贝和深拷贝的效果也与列表类似。


总结

通过上面的例子,我们可以看到浅拷贝和深拷贝的区别。浅拷贝只复制对象的第一层,对于对象中的可变子对象,只是复制了它们的引用;而深拷贝不仅复制对象的第一层,还会递归地复制所有子对象。选择哪种拷贝方式取决于具体的应用场景。
希望这篇博客能帮助你更好地理解和使用浅拷贝和深拷贝。如果还有任何疑问,欢迎留言讨论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值