avatar

RWO.cc

读一次写一次

  • 首页
  • 搭建手册
  • 笔记
  • 短视频
  • 关于
  • 🌈200粉丝🌈
Home Deepcopy 太慢
文章

Deepcopy 太慢

Posted 2024-04-19 Updated 2024-04- 19
By RWO.
2~3 min read

问题原因

使用 deepcopy 太慢,是因为 deepcopy 会递归复制对象中的每一个层次的成员,包括所有的嵌套对象。

相比之下,copy 只是进行浅复制,它只复制对象本身和其中包含的引用,而不复制引用指向的对象。

折中解决方法

  1. 手动实现定制的深复制:实现一个自定义的深复制方法,只复制关心的属性,而不是对象中的每一个属性。
  2. 使用原型设计模式:设计一个克隆方法,允许克隆对象的当前状态,这可以作为一种定制的深复制解决方案。
  3. 使用序列化:如果对象可以被序列化,可以通过序列化和反序列化对象来快速地创建深层副本。这通常用JSON或Pickle来实现。

代码示例

序列化和反序列化来进行深复制的简单示例

import copy
import json

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

    def __deepcopy__(self, memo):
        return json.loads(json.dumps(self, default=lambda o: o.__dict__),
                          object_hook=lambda d: MyObject(**d))

# 创建一个对象实例
original = MyObject({'a': 1, 'b': 2})

# 使用定制的深复制方法
copied = copy.deepcopy(original)

Pickle

import copy
import pickle

class MyObject:
    # ... 类定义 ...

# 创建一个对象实例
original = MyObject()

# 使用pickle来深复制
copied = pickle.loads(pickle.dumps(original))

总结

使用序列化方法可能比 deepcopy 快,尤其是对于那些包含复杂数据结构但不包含不可序列化对象的情况。然而,请注意,不是所有对象都可以序列化,并且对于某些特定类型的对象(如文件,数据库连接等),这种方法不适用。

笔记
Python 学习
License:  CC BY 4.0
Share

Further Reading

Oct 29, 2024

halo代码注入——实现悬浮展示当前文章二维码 和 自定义主题字体

文章页面悬浮在二维码标志上面,就会把当前页面链接变成二维码并且展示出来,我当前使用的主题没有,所以写此文章记录一下。 效果展示 悬浮二维码效果展示 自定义字体效果展示 代码注入位置 代码一:悬浮二维码 原始<

Aug 26, 2024

Tortoise ORM - values()和value_list()

django: values()与values_list() from django.db import models class Blog(models.Model): name = models.CharField(max_length=100) tagline = model

Aug 25, 2024

tortoise orm 执行原生 SQL 查询

Tortoise ORM 提供了多种方式来执行 SQL 查询。 使用 execute_query_dict 方法执行查询,并以字典的形式返回查询结果: from tortoise.backends.asyncpg import client from typing import List, Opti

OLDER

Python中断方法执行

NEWER

websockets 的 PayloadTooBig 错误

Recently Updated

  • 什么是 python 的闭包
  • 使用argparse模块解析命令行参数
  • Python中的二维码生成与解析(花里胡哨)
  • Python中的二维码生成与解析(基础使用)
  • 使用platform模块获取系统信息

Trending Tags

学习 Git 工具 SQL docker-compose 每日一点 快捷键 Flink fastapi Windows

Contents

©2025 RWO.cc. Some rights reserved.

Using the Halo theme Chirpy