举例区分Python中的浅复制与深复制

作者:DarkBull 时间:2022-08-20 02:34:57 

copy模块用于对象的拷贝操作。该模块非常简单,只提供了两个主要的方法: copy.copy 与 copy.deepcopy ,分别表示浅复制与深复制。什么是浅复制,什么是深复制,网上有一卡车一卡车的资料,这里不作详细介绍。复制操作只对复合对象有效。用简单的例子来分别介绍这两个方法。

浅复制只复制对象本身,没有复制该对象所引用的对象。
 


#coding=gbk
import copy
l1 = [1, 2, [3, 4]]
l2 = copy.copy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]
[1, 2, [50, 4]]

同样的代码,使用深复制,结果就不一样:
 


import copy
l1 = [1, 2, [3, 4]]
l2 = copy.deepcopy(l1)
print l1
print l2
l2[2][0] = 50
print l1
print l2
#---- 结果 ----
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
[1, 2, [50, 4]]

改变copy的默认行为

在定义类的时候,通过定义__copy__和__deepcopy__方法,可以改变copy的默认行为。下面是一个简单的例子:
 


class CopyObj(object):
 def __repr__(self):
   return "CopyObj"

def __copy__(self):
   return "Hello"
obj = CopyObj()
obj1 = copy.copy(obj)
print obj
print obj1
#---- 结果 ----
CopyObj
Hello
标签:Python,复制
0
投稿

猜你喜欢

  • Python之两种模式的生产者消费者模型详解

    2021-07-31 17:44:02
  • python logging模块的分文件存放详析

    2023-04-02 20:27:32
  • Python PyQt5实战项目之查询器的实现流程详解

    2023-07-15 04:19:21
  • Python删除字符串中字符的四种方法示例代码

    2021-09-25 08:23:25
  • 教你一步步实现一个简易promise

    2024-04-26 17:11:37
  • laravel 5异常错误:FatalErrorException in Handler.php line 38的解决

    2024-06-05 09:22:11
  • 在Python程序员面试中被问的最多的10道题

    2022-02-27 08:20:03
  • python scipy 稀疏矩阵的使用说明

    2022-06-22 16:20:48
  • Python程序设计入门(1)基本语法简介

    2023-09-12 05:03:31
  • window.close(); 关闭浏览器窗口js代码的总结介绍

    2024-04-19 10:54:56
  • JS中模拟函数重载

    2008-01-03 16:46:00
  • Python多线程操作之互斥锁、递归锁、信号量、事件实例详解

    2023-03-09 04:22:05
  • 基于python实现操作redis及消息队列

    2021-08-06 22:31:29
  • VSCode开发必备插件推荐(墙裂推荐!)

    2022-06-21 14:09:16
  • 快速解决pandas.read_csv()乱码的问题

    2023-07-10 21:14:47
  • 在pycharm中debug 实时查看数据操作(交互式)

    2023-01-19 08:31:11
  • CentOS 7安装MySQL的详细步骤

    2024-01-25 19:59:17
  • python实现文件快照加密保护的方法

    2022-08-21 20:01:29
  • 简介Django框架中可使用的各类缓存

    2022-01-16 13:02:39
  • 开源MySQL公司停止提供企业版源代码tar包

    2009-01-14 13:02:00
  • asp之家 网络编程 m.aspxhome.com