Python学习记录 对象的浅拷贝和深拷贝

面向对象程序设计(个人学习记录) 自定义数据结构类型的语法结构为:class 类名():pass创建对象的语法格式为:对象名=类名() 阅读详情

2022.08.18 DAY34

特殊属性
  • Python对象中包含了很多双下滑线开始和结束的属性,这些是特殊属性,有特殊用法。

      obj.__dict__    对象属性字典
      obj.__class__   对象所属的类
      class.__bases__ 类的基本元祖(多继承)
      class.__base__  类的基类
      class.__mro__   类层次结构
      class.__subclasses__()  子类列表
    
对象的浅拷贝和深拷贝
  • 变量的赋值操作
    • 只是形成两个变量,实际还是指向同样一个对象,
  • 浅拷贝
    • Python中的拷贝一般都是浅拷贝。
    • 浅拷贝,对象包含的子对象内容不拷贝。所以,源对象和拷贝对象都会引用同一个子对象。
  • 深拷贝
    • 使用copy模块的deepcope函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。

测试代码:

import copy

class MobilePhone:
    def __init__(self, cpu, screen):
        self.cpu = cpu
        self.screen = screen

class CPU:
    def calculate(self):
        print("算你个!@#¥%……&*")
        print("CPU对象:", self)

class Screen:
    def show(self):
        print("显示一个好看的画面,亮瞎你的钛合金大眼")
        print("Screen对象:", self)

def test():
    c1 = CPU()
    c2 = c1
    print(c1)
    print(c2)

    s1 = Screen()
    m1 = MobilePhone(c1, s1)
    m2 = copy.copy(m1)
    print(m1)
    print(m1.cpu)
    print(m1.screen)

    print(m2)
    print(m2.cpu)
    print(m2.screen)

    m3 = copy.deepcopy(m1)
    print(m3)
    print(m3.cpu)
    print(m3.screen)


if __name__ == "__main__":
    test()

运行结果:

<__main__.CPU object at 0x000001A235B88400>
<__main__.CPU object at 0x000001A235B88400>

<__main__.MobilePhone object at 0x000001A235B72340>
<__main__.CPU object at 0x000001A235B88400>
<__main__.Screen object at 0x000001A235C01D00>

<__main__.MobilePhone object at 0x000001A235C97FD0>
<__main__.CPU object at 0x000001A235B88400>
<__main__.Screen object at 0x000001A235C01D00>

<__main__.MobilePhone object at 0x000001A235CA5430>
<__main__.CPU object at 0x000001A235CE1AC0>
<__main__.Screen object at 0x000001A235CE1B50>
组合
  • 实现一个类拥有另一个类的方法和属性。

测试代码:

# 测试组合

class A1:
    def say_a1(self):
        print("a1:", self)

class B1:
    def __init__(self, a):
        self.a = a

def test():
    a1 = A1()
    b1 = B1(a1)
    b1.a.say_a1()


if __name__ == "__main__":
    test()

运行结果:

a1: <__main__.A1 object at 0x0000024CFE288400>
Python 浅拷贝 深拷贝 及引用机制 这礼拜碰到一些问题,然后意识到基础知识一段时间没巩固的话,还是有遗忘的部分,还是需要温习,这里做份笔记,记录一下 前续 先简单描述下碰到的题目,要求是写出2个print的结果 可以看到,a指向了一个列表list对象,在python中,这样的赋值语句,其实内部含义是指a指向这个list所在内存地址,可以看作类似指针的概念。 而b,注意,他是把a对象包裹进一个lis 阅读详情

相关推荐

python中变量的赋值、浅拷贝、深拷贝

问题 写一段测试程序,我本意是想从一个DataFrame对象复制出来一个独立的副本出来,代码如下: df = pd.DataFrame() df1 = df # 改变df1的元素 df1[row][col] = 'b' print(df) print(df1) 结果打印出来的df也改变了。 也就是说,在改变df1的时候df也改变了,它们实际指向的同一块内存。 如何解决这个问题呢,查阅了一些资料,把原理和解决思路作一记录。 两类对象 首先来了解一下python中的两类对象:不可变对象和可变对象。

guotianqing的博客 1869

python对象复制_如何将一个Python对象的所有属性复制到另一个Python对象?

显而易见的解决方案是使用组合/委派而不是继承:class Parent(object):def __init__(self, name, number):self.name = nameself.number = numberclass Child(object):def __init__(self, parent, other):self.parent = parentself.other = ...

weixin_36251012的博客 1494

常用的数据结构以及常用的算法

常用的数据结构以及常用的算法 常用数据结构 数据结构是计算机存储、组织数据的方式。 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。 数据结构往往同高效的检索算法和索引技术有关。 一、线性表 线性结构: 最常用、最简单的一种数据结构。 线性表: 典型的线性结构。基本特点是线性表中的 数据元素有序且有限。结构中: ① 存在一个唯一的被称为“第一个”的数据元素; ② 存在一个唯一的被称为“最后一个”的数据元素; ③ 除第一个元素外,每

qq_47605698的博客 1450

Python 字典(dict)浅拷贝(copy())与深拷贝(deepcopy())

本文主要介绍Python中,使用copy()或dict()方法对字典(dict)对象浅拷贝,和使用deepcopy()方法对字典(dict)对象深拷贝的方法,以及相关的示例代码。

weixin_52026996的博客 9276

Hi3516CV610硬件设计避坑指南:从电源模块到DDR布线实战解析

本文深入解析了Hi3516CV610硬件设计中的关键难点与实战技巧。重点剖析了电源架构的选型陷阱与PCB布局要点,详细阐述了DDR3/L高速布线的等长匹配、信号完整性及端接策略,并提供了MIPI接口与时钟电路的隔离设计指南。旨在帮助工程师规避常见设计错误,提升系统稳定性与可靠性。

ooo22的博客 255

CentOS7下OpenVPN Access Server 2.12.0安装与智能分流配置指南

本文详细介绍了在CentOS7系统上安装OpenVPN Access Server 2.12.0并进行智能分流配置的完整指南。从环境准备、核心安装到智能分流策略的深度配置,提供了经过验证的优化方案和故障排查技巧,帮助用户实现高效的VPN网关部署和流量管理。

weixin_30546189的博客 290

详解python列表等对象的赋值和复制(浅拷贝copy()及深拷贝deepcopy()的使用区别与示例)

python中针对列表等对象、子对象等情况,如果区分等号赋值、浅拷贝、深拷贝等功能。详解列表赋值、copy()函数、deepcopy()函数

大龙虾的技术成长专栏 4593

超越音频!STM32 SAI接口在AD7768高速ADC采集中的妙用(含PCB布局指南)

本文深入探讨了如何将STM32的SAI接口应用于AD7768高速ADC的数据采集系统,超越了其传统的音频应用范畴。文章详细解析了SAI协议与ADC时序的匹配方法,提供了从CubeMX配置、DMA数据搬运到关键PCB布局指南的完整实战方案,旨在帮助工程师实现稳定、高精度的工业级高速数据采集。

efc12345678的博客 304

Python学习记录-类的浅拷贝和深拷贝

Python学习记录-类的浅拷贝和深拷贝

Ricardo_PING的Blog 328

为什么PCB设计中的50Ω阻抗如此重要?从USB到以太网的实战解析

本文深入解析了PCB设计中50Ω特征阻抗的核心重要性及其工程权衡起源。文章从传输线理论出发,阐释了阻抗匹配对防止信号反射、确保信号完整性的关键作用,并对比了USB、以太网等不同应用场景的阻抗标准。同时,文章结合实际案例,剖析了在两层板等简单设计中实现精准阻抗控制的难点与实战解决方案。

weixin_29268385的博客 297

2026年中兴微电子数字IC设计笔试题带答案

这篇考试试卷涵盖了数字IC设计的关键知识点,主要包含四个部分:单选题(18分)考查RTL仿真、低功耗设计、跨时钟域处理等基础知识;多选题(15分)涉及低功耗技术、异步FIFO设计和工具链使用;代码设计题(25分)要求实现两级同步器和时钟门控电路;简答题(42分)重点考察异步FIFO原理、ASIC设计流程、FPGA时钟处理和时序违例修复方法。试题注重理论与实践结合,既包含概念性知识也强调实际工程能力,全面检验学生对数字IC前端设计核心技术的掌握程度。

Open 119

python获取对象属性:dir()函数 、obj.__dict__ 、obj.inspect.getmebers

一、Python __dict__与dir() Python下一切皆对象,每个对象都有多个属性(attribute),Python对属性有一套统一的管理方案。 __dict__与dir()的区别: dir()是一个函数,返回的是list; __dict__是一个字典,键为属性名,值为属性值;__dict__包含了模块里可用的属性名-属性的字典;也就是可以使用模块名.属性名访问的对象。 dir()...

luo_xinyu的博客 1384

OpenClaw实战系列·进阶特辑02:多智能体协同——打造企业级AI中台

**企业级AI中台面临多Agent协同的挑战,本文提出基于多智能体协同的解决方案。通过分析单Agent的局限性(上下文溢出、专业度稀释等)和多Agent的核心优势(任务专注度、故障隔离等),提出三种协作架构模式(指挥型、联邦型、点对点型),并强调人格化设计的重要性。文章详细介绍Agent间通讯机制(同步/异步会话、文件系统协作)和"身脑分离"的解耦架构设计,提供可落地的企业级AI中台实施方案。

PeterPan的博客 494

python18-深拷贝和浅拷贝

【代码】python18-深拷贝和浅拷贝。

春风若有怜花意,可否许我再少年 454

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3753

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Python基础知识学习记录 2021——1202(对象的浅拷贝和深拷贝,组合,设计模式(工厂模式实现),设计模式(单例模式实现))

文章目录对象的浅拷贝和深拷贝组合设计模式工厂模式实现单例模式实现 对象的浅拷贝和深拷贝 ·变量的赋值操作 只是形成两个变量,实际还是指向同一个对象。 ·浅拷贝 Python 拷贝一般都是浅拷贝。拷贝时,对象包含的子对象内容不拷贝。因此,源对象和拷贝对象会引用同一个子对象。 ·深拷贝 使用 copy 模块的 deepcopy 函数,递归拷贝对象中包含的子对象。源对象和拷贝对象所有的子对象也不同。 #测试对象的引用赋值、浅拷贝、深拷贝 import copy class MobilePhone: def

Lime_Tr的博客 207

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

学习日志12 python

操作列表元素为值类型列表元素为引用类型a * n独立副本共享引用独立副本独立副本独立副本独立副本核心原则:当列表元素是引用类型时,直接复制(如或)只会复制引用,需使用创建完全独立的副本。

im_AMBER的博客 978

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Python小白学习记录11

Python语言中的多态,根本不关心对象的数据类型,也不关心类之间是否存在继承关系,只关心对象的行为(方法)。只要不同类中有同名的方法,即可实现多态。子类在重写父类的方法时,要求方法的名称必须与父类方法的名称相同,在子类重写后的方法中可以通过super().xxx()调用父类中的方法。是在函数调用时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,将使用传递的值。多态指的就是多种形态,即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用对象的方法。

2301_78083896的博客 351

Python学习笔记

a=100a=10nonlocal aa=90inner()print(a)#90,外层变量已改变outer()匿名函数函数名 = lambda 形参:返回值(表达式)zip()用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表l1=[1,2,3]

weixin_62715292的博客 483

浅拷贝和深拷贝的区别?

  概述:   浅拷贝可以使用列表自带的copy()函数(如list.copy()),或者使用copy模块的copy()函数。深拷贝只能使用copy模块的deepcopy(),所以使用前要导入:from copy import deepcopy   如果拷贝的对象里的元素只有值,没有引用,那浅拷贝和深拷贝没有差别,都会将原有对象复制一份,产生一个新对象,对新对象里的值进行修改不会影响原有对象...

Lin的博客 6万+

python深拷贝和浅拷贝

深入剖析深拷贝、浅拷贝、赋值的区别

qq_52758588的博客 1259

python 深拷贝和浅拷贝

在 Python 的世界里,复制对象并不像表面看起来那么简单。深拷贝和浅拷贝这两种复制方式,就像魔法师的两种咒语,创造出不同的复制效果。它们看似相似,却有着本质的区别。想要避免程序中潜藏的陷阱,就需要理解这两种复制方式的奥秘,并选择正确的咒语来复制你的对象!

知命不惧,日日自新。 766

python中的浅拷贝与深拷贝(与c++的对比) python中的浅拷贝与深拷贝(与c++的对比)

最近在系统的学习python的过程中的发现(都理解成了c++中的浅拷贝和深拷贝),在此记录。

m0_59236602的博客 868

5张图彻底理解Python中的浅拷贝与深拷贝_如何理解python的浅拷贝和深拷贝

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

2401_84572413的博客 898

浅谈python深拷贝和浅拷贝

最近在面试过程中经常被问到python的浅拷贝和深拷贝,在笔试过程中也因为深拷贝和浅拷贝出现了很多问题,所以这里整理一下有关python深拷贝和浅拷贝的相关知识 主要参考以下几篇博客: 夏晓旭 菜鸟教程 python深拷贝和浅拷贝的区别 在介绍深拷贝和浅拷贝之前需要先理解python的可变和不可变对象 python可变和不可变对象 python中有可变对象和不可变对象。可变对象:list,dict. 不可变对象有:int,string,float,tuple 不可变对象 示例如下: def viable

Jennifer_go 814

python深拷贝一个对象_Python中深拷贝、浅拷贝问题

有一次面试的时候被问到了,记录一下。python中对于对象的拷贝分为两种方式:深拷贝和浅拷贝。浅拷贝用‘=’实现,深拷贝则使用deepcopy()函数完成。浅拷贝和深拷贝的区别是:浅拷贝只是将原对象在内存中引用地址拷贝过来了,让新的对象指向这个地址,这样新对象与原对象指向的地址相同;而深拷贝是将这个对象的所有内容拷贝过来了,包括值与内存地址,所以如果你这时候修改原来对象的值跟新对象没关系了,不会随...

weixin_39837207的博客 466
上一篇: Python学习记录 多态及特殊方法和运算符的重载
下一篇: Python学习记录 设计模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值