Python如何实现对象克隆,浅拷贝和深拷贝有什么区别?

Python 对象克隆详解

在 Python 中,“克隆”通常指的是创建现有对象的副本,由于 Python 的变量实际上是对对象的引用,直接使用赋值符号 并不会创建新对象,而只是创建了一个指向同一内存地址的新引用。

为了实现真正的克隆,我们需要根据对象的复杂程度选择浅拷贝(Shallow Copy)或深拷贝(Deep Copy)。

Python 浅拷贝 vs 深拷贝,一行代码分清引用与独立复制
加载中
Python 浅拷贝 vs 深拷贝,一行代码分清引用与独立复制

引用赋值(非克隆)

当你使用 a = b 时,并没有发生克隆,两个变量指向的是同一个对象,修改其中一个,另一个也会随之改变。

  • 特点:不创建新对象,仅增加引用计数。
  • 适用场景:仅需起个别名时。

浅拷贝 (Shallow Copy)

浅拷贝会创建一个新对象,但如果原对象内部包含其他可变对象(如列表中的列表),它只会拷贝这些内部对象的引用。

实现方法

  • 使用 copy 模块:copy.copy()
  • 使用切片(仅限列表):new_list = old_list[:]
  • Python如何实现对象克隆,浅拷贝和深拷贝有什么区别?

    使用工厂函数:new_list = list(old_list) 或 new_dict = dict(old_dict)

  • 使用内置方法:new_list = old_list.copy()

关键特性

  • 第一层独立:修改克隆后的顶层元素不会影响原对象。
  • 嵌套层共享:修改克隆对象内部的嵌套可变对象,原对象会被同步修改。

深拷贝 (Deep Copy)

深拷贝会递归地复制对象及其包含的所有子对象,它会创建一个完全独立的副本,原对象与新对象之间没有任何共享的内存地址。

实现方法

  • 使用 copy 模块:copy.deepcopy()

关键特性

  • 完全独立:无论对象嵌套多少层,修改新对象都不会影响原对象。
  • 性能开销:由于需要递归遍历并复制所有内容,深拷贝比浅拷贝慢且占用更多内存。

核心对比总结

方式 语法

Python如何实现对象克隆,浅拷贝和深拷贝有什么区别?

顶层对象

嵌套对象独立程度
引用赋值b = a共享共享完全不独立
浅拷贝copy.copy(a)创建新对象共享部分独立
深拷贝copy.deepcopy(a)创建新对象创建新对象完全独立

代码示例演示

import copy# 准备一个嵌套列表original = [[1, 2], [3, 4]]# 1. 引用赋值ref_copy = original# 2. 浅拷贝shallow_copy = co

Python如何实现对象克隆,浅拷贝和深拷贝有什么区别?

py.copy(original) # 3. 深拷贝 deep_copy = copy.deepcopy(original) # 修改嵌套元素 original[0][0] = 'X' print(f"原对象: {original}") # [['X', 2], [3, 4]] print(f"引用赋值: {ref_copy}") # [['X', 2], [3, 4]] -> 受影响 print(f"浅拷贝: {shallow_copy}") # [['X', 2], [3, 4]] -> 受影响 (因为嵌套对象是共享的) print(f"深拷贝: {deep_copy}") # [[1, 2], [3, 4]] -> 不受影响 (完全独立) # 修改顶层元素 original.append([5, 6]) print(f"原对象: {original}") # [['X', 2], [3, 4], [5, 6]] print(f"浅拷贝: {shallow_copy}") # [['X', 2], [3, 4]] -> 不受影响 (顶层已独立)

选择指南

  • 如果对象是不可变类型(如数字、字符串、元组),直接赋值即可,因为它们无法被修改。
  • 如果对象是简单的一层可变类型(如简单的列表或字典),使用浅拷贝。
  • 如果对象包含复杂的嵌套结构(如列表嵌套字典,或自定义类的实例),且需要确保修改副本不影响原件,必须使用深拷贝。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/493602.html

赞 (0)
点播CDN是什么?如何选择高性价比的视频点播CDN加速服务?
上一篇 2026年7月14日 08:13
什么是百度公共CDN?百度公共CDN有哪些好用的前端资源库?
下一篇 2026年7月14日 08:17

相关推荐

  • 服务器机器码能修改吗,服务器机器码怎么修改

    服务器机器码作为设备的唯一数字指纹,通常由MAC地址、UUID、主板序列号等硬件特征组合而成,关于服务器机器码能修改吗这一核心问题,从技术底层逻辑与系统运维的实践来看,答案是肯定的,虽然机器码旨在提供不可更改的硬件标识,但在特定的技术手段下,无论是物理服务器还是云主机,其机器码均可以实现修改,这种修改并非简单的……

    2026年2月17日
    30830
  • 服务器如何开启UDP?Windows系统服务器开启UDP端口详细教程

    开启UDP端口是提升网络传输效率、降低延迟的关键技术手段,尤其适用于实时音视频传输、在线游戏及大规模数据分发场景,与TCP协议相比,UDP协议无需建立连接、不提供确认重传机制,因此具有更低的系统开销和更快的响应速度,在服务器环境中,合理配置UDP端口能够显著提升业务性能,但同时也需要严格的安全策略来防范潜在风险……

    2026年3月29日
    9000
  • 服务器CDN如何加速?,哪个效果最好

    部署服务器CDN服务时,最关键的是根据业务类型评估节点覆盖与计费灵活性,而非简单对比低价,近年来超过七成的互联网流量经由CDN分发,几乎任何中大型站点都依赖这套基础设施来保障访问速度,但很多用户在选择时被套餐和术语绕晕,尤其分不清服务器CDN与普通加速服务的本质区别,本文从实际场景出发,帮你理清选型、成本与运维……

    2026年7月16日
    1500
  • 高级数据库技术是什么?高级数据库技术培训课程

    2026年高级数据库技术的核心演进方向,已全面转向云原生分布式架构与AI驱动的自治引擎,这是解决海量数据高并发与实时智能分析的唯一路径,2026高级数据库技术演进底座云原生分布式架构重塑存储计算传统单机架构已无法满足PB级数据流转,2026年,存算分离从“可选项”变为“必选项”,资源解耦:计算节点与存储节点独立……

    2026年4月26日
    5700
  • 个人logo怎么设计好看?个人logo设计免费素材

    个人Logo设计并非简单的图形拼凑,而是品牌人格的视觉浓缩,核心在于通过极简符号与独特色彩建立高辨识度的记忆锚点,在2026年的数字生态中,个人IP的崛起让每一个独立创作者、自由职业者甚至小型工作室都拥有了自己的“数字门面”,Logo不再仅仅是企业的附属品,它成为了你个人品牌的视觉身份证,很多人误以为找个模板套……

    2026年6月17日
    4900
  • 服务器一年价格大概是多少,推荐哪家更便宜?

    服务器一年价格从几百元到数十万元不等,具体取决于类型、配置、带宽和地域,企业用户需根据业务场景综合评估, 选择服务器前,先明确预算范围和核心需求,再对比不同方案的长期成本,才能避免花冤枉钱,以下按常见场景拆解价格构成,并给出可操作的选择思路,服务器一年多少钱?核心价格区间解析服务器价格跨度极大,不同形态的产品对……

    2026年7月30日
    500
  • 金蝶python二次开发怎么做,如何实现?

    金蝶 Python 是指通过 Python 语言的灵活性与丰富生态,对金蝶 ERP 系统进行二次开发、自动化操作与数据集成,从而大幅提升企业财务、供应链等模块的运营效率,是当前最受企业 IT 团队青睐的轻量级解决方案,金蝶 Python 开发能解决哪些实际痛点传统金蝶系统(如 K/3 WISE、金蝶云星空)在日……

    2026年7月19日
    2100
  • 个人站长租服务器哪个划算?云服务器租用价格及配置推荐

    个人站长租服务器,首选国内轻量应用服务器或海外VPS,核心在于平衡备案合规性、访问速度与预算,新手建议从阿里云或腾讯云的低配入门款起步,对于独立开发者或个人博客主来说,服务器不再是遥不可及的企业级资产,而是像水电煤一样的基础工具,2026年的云计算市场更加成熟,选择不再局限于“贵”与“便宜”的二元对立,而是关乎……

    2026年5月26日
    3600
  • 个人注册企业域名怎么操作?个人申请公司域名流程

    个人注册企业域名完全可行,但需持有营业执照,推荐使用“.com”或“.cn”后缀,并在阿里云、腾讯云等正规平台完成实名认证后购买,很多人误以为域名注册是企业的“专利”,个人想拥有专属网络身份似乎遥不可及,只要理清规则,个人不仅能注册,还能以极低成本获得极具商业价值的数字资产,域名不仅是网站的门牌号,更是品牌信任……

    2026年5月28日
    5000
  • 服务器密码忘了怎么修改?服务器密码重置忘记怎么办

    服务器密码修改忘了?别慌,专业解决方案来了当您发现服务器密码修改忘了,首要任务是冷静评估影响范围,而非盲目尝试重置,90%的服务器失陷事件源于错误的密码恢复操作,而非原始密码遗忘本身,本文基于企业级运维实践,提供一套安全、高效、可复用的密码恢复路径,适用于Linux(CentOS/Ubuntu)、Windows……

    2026年4月15日
    7000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注