首页常见问题正文

Python里面如何拷贝一个对象?

更新时间:2024-03-15 来源:黑马程序员 浏览量:

IT培训班

  在Python中,要拷贝一个对象,我们可以使用浅拷贝(shallow copy)或者深拷贝(deep copy),具体取决于我们想要的复制深度。这两者的主要区别在于拷贝的对象中是否包含了子对象,以及是否创建了对原始对象的全新副本。接下来笔者就针对两种拷贝方法的详细说明以及代码演示:

  1.浅拷贝(Shallow Copy)

  浅拷贝会创建一个新的对象,但是它只会复制原始对象的顶层结构,而不会复制其内部的子对象。这意味着拷贝后的对象中的子对象仍然是原始对象中子对象的引用。

  使用copy模块的copy()函数来进行浅拷贝:

import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 进行浅拷贝
copied_list = copy.copy(original_list)

# 修改原始列表的子对象
original_list[2][0] = 100

# 输出原始列表和拷贝后的列表
print("Original list:", original_list)
print("Copied list:", copied_list)

  输出:

Original list: [1, 2, [100, 4]]
Copied list: [1, 2, [100, 4]]

  可以看到,尽管我们只修改了原始列表中的子对象,但是拷贝后的列表中的对应子对象也发生了变化,这是因为浅拷贝只复制了原始列表的顶层结构,而不会复制其内部的子对象。

1710467284970_深拷贝与浅拷贝-(1).jpg

  2.深拷贝(Deep Copy)

  深拷贝会创建一个完全独立于原始对象的新对象,包括其内部的所有子对象。这意味着即使原始对象中的子对象发生了变化,深拷贝后的对象也不会受到影响。

  使用copy模块的deepcopy()函数来进行深拷贝:

import copy

# 原始列表
original_list = [1, 2, [3, 4]]

# 进行深拷贝
copied_list = copy.deepcopy(original_list)

# 修改原始列表的子对象
original_list[2][0] = 100

# 输出原始列表和拷贝后的列表
print("Original list:", original_list)
print("Copied list:", copied_list)

  输出:

Original list: [1, 2, [100, 4]]
Copied list: [1, 2, [3, 4]]

  可以看到,即使修改了原始列表中的子对象,深拷贝后的列表中的对应子对象保持不变,这是因为深拷贝会递归地复制原始对象及其所有子对象。

  总结

  1.使用浅拷贝时,复制的对象与原始对象共享内部子对象的引用,因此对原始对象的子对象的修改会影响到拷贝后的对象。

  2.使用深拷贝时,复制的对象是完全独立于原始对象的,即使原始对象中的子对象发生变化,也不会影响到拷贝后的对象。

  根据我们的需求选择适当的拷贝方式,以确保程序的正确性和性能。

分享到:
在线咨询 我要报名
和我们在线交谈!