python函数——浅拷贝copy()以及深拷贝deepcopy()

时间:2022-07-24
本文章向大家介绍python函数——浅拷贝copy()以及深拷贝deepcopy(),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

0. 前言

在python 中我们想备份一个list ,但是如果改变其中一个值,另外一个也会变,如下所示:

>>> a = b = c = [4,5]
>>> a
[4, 5]

# 改变 a 的值  
>>> a.append(7)
>>> a
[4, 5, 7]
>>> b
[4, 5, 7]
>>> c
[4, 5, 7]

>>> a[0] = 1
>>> a
[1, 5, 7]
>>> b
[1, 5, 7]
>>> c
[1, 5, 7]

如果我们只想改变a的值,另外几个都会原始值,不随其变化而变化,那么我们将使用copy函数 Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块。

1. deepcopy() 与 copy()

  1. copy.copy() 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
  2. copy.deepcopy() 深拷贝 拷贝对象及其子对象

结合实例会更好理解:

# 原始值
>>> a = [1,2,3,4,["aa", "bb"]]
# 赋值
>>> b = a
# 浅拷贝
>>> c = copy.copy(a)
# 深拷贝
>>> d = copy.deepcopy(a)

# 改变 a 值
>>> a.append(10)
>>> a[4].append("cc")


>>> a
[1, 2, 3, 4, ['aa', 'bb', 'cc'], 10]
>>> b
[1, 2, 3, 4, ['aa', 'bb', 'cc'], 10]
>>> c
[1, 2, 3, 4, ['aa', 'bb', 'cc']]
>>> d
[1, 2, 3, 4, ['aa', 'bb']]