首页 > 编程语言 >简析python深浅拷贝

简析python深浅拷贝

时间:2023-06-05 17:12:59浏览次数:40  
标签:内存地址 python 简析 内存 成绩 拷贝 copy id

1.基础知识

a=123
b=123
#内存函数id,返回变量的内存地址 id(a) id(b) c="123" d=c id(c) id(d) f=[1,2,3] g=[1,2,3] h=f id(f) id(g) id(h)

使用内存分析工具winDbg查看这两个变量的内存分布

操作步骤:

1.使用系统计算机工具程序员模式 复制粘贴id 得到16进制内存地址

2.打开winDbg粘贴16进制数据,得到内存信息

观察所得:

  • 内存地址没有改变,内存中的值变了(对原内存就地完成修改)
  • 内存地址变了,内存中值也变了(没有对内存进行修改,而是在新的内存中放置新的值)

对于数据对象,是否支持在原内存进行修改,可分为:
可变对象:列表,字典,集合(原内存,内存地址没变)
不可变对象:数字、字符串、元组(新内存,内存地址改变了)

 

2.深浅拷贝

拷贝:复制一个对象

2.1 浅拷贝

copy.copy() 效率高,开销少节约内存,但是数据不隔离,只复制父节点

为什么修改浅拷贝的数据,没有对其他数据进行影响

  • 因为不可变对象,不会发生变化,当我们讨论深浅拷贝时,只针对可变对象
dd=copy.copy(d) #字典创建新的内存
m=copy.copy("123") #字符串,整数,列表没有创建新的内存

2.2 深拷贝

copy.deepcopy() 效率低,开销大会开辟新内存,数据完全隔离,复制父子节点

所有的变量都是可以深拷贝的吗?

  • 不是,例如队列 有锁 不能拷贝

dd=copy.deepcopy(d)

2.3 相关面试题:

"""
张三的成绩如下

张三={
"语文":70,
"数学":65,
"英语":66,
"生物":69,
"政治":78,
"跳远":[1.2,1.3,1.2]
}

李四的语文成绩比张三高20,跳远成绩最后一次是1.5,其他成绩与张三一样
王舞的语文成绩比张三高10,其他成绩与张三一样

请使用最少的代码完成数据处理,使得下面的代码可以同时打印三个人的成绩
"""

import copy

zhangsan={
"语文":70,
"数学":65,
"英语":66,
"生物":69,
"政治":78,
"跳远":[1.2,1.3,1.2]
}

lisi=copy.deepcopy(zhangsan)
lisi['语文']+=20
lisi['跳远'][-1]=1.5
wangwu=copy.copy(zhangsan)
wangwu['语文']+=10


print(f"张三成绩={zhangsan}\n李四成绩={lisi},\n王舞成绩={wangwu}")

  

 

标签:内存地址,python,简析,内存,成绩,拷贝,copy,id
From: https://www.cnblogs.com/lgs-tech/p/17458296.html

相关文章

  • 实验6 turtle绘图与python库应用编程体验
    任务1fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)draw(3)mov......
  • Python学习的个人笔记
    python基础知识目录:Python基础语法:(1)打印出helloworld(2)注释(3)数据类型(4)运算(5)输入(6)输出(7)序列(8)相等比较(9)选择(10)循环(11)字典(dict)(12)集合(set)(不常用)(14)pass,del,exec,eval(15)内建函数Python进阶语法:(1)文件(2)错误和异常(3)模块和包(4)作用域(5)高阶函数(6)装饰器(7)参数(8)面......
  • Python之生成器
    生成器''' 生成器就是迭代器的另一种形式,可以理解为生成器就是一种自定义的迭代器 '''所以什么是生成器? 通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前......
  • python requests请post接口200,打印提示Unexpected character encountered while parsi
    pythonrequests发起httppost请求,带参数,带请求头,代码设置检查没有问题runpy文件提示Unexpectedcharacterencounteredwhileparsingvalue:p.Path,问题一:body请求形式未进行json格式data=json.dumps(body)dumps的功能是将字典类型转换未json格式的字符串类型。......
  • python 列表 tips stackOverflow数据统计
    PYTHON笔记一Noteone**python中的集合类,有列表,元组,字典和集合四种。定义方式分别为:List=[]Turple=()Dict={key:value}Set={}作为JAVA程序员看来,python中的集合与JAVA中的集合类其实很相似,用着肯定是python更好用,个人认为优点如下:1.没有强定义类型。2.提供了很方便的......
  • PyInstaller 完美打包 Python 脚本,输出结构清晰、便于二次编辑的打包程序
    引入问题如果我要写一个Python项目,打包成exe运行(方便在没有Python的电脑上使用),我需要打包出的根目录结构美观,没有多余的、杂乱的依赖文件在那里碍眼,而且需要在发现bug时,我还需要能够修改里面的代码后,无需再次打包,就能正常运行,该怎么做呢?就以一个Hello项目为例,记一下我......
  • Python实验课5
    实验任务六实验源码:1withopen('data6.csv','r',encoding='gbk')asf:2data=f.readlines()3data1=[str(eval(data[i]))foriinrange(1,len(data))]4data2=[str(int(eval(data[i])+0.5))foriinrange(1,len(data))]5info=......
  • python操作Excel,读取表格内容,并根据需求将内容填充到表格指定位置
    在日常工作中经常会遇到需要将“表一,部门信息表”内容逐行填充到“表二,个人基本信息表”的情况。表一:表二:  实现方式如下:#!usr/bin/python#-*-coding:utf-8-*-importpandasaspdimportopenpyxlasopfromopenpyxlimportWorkbookfromopenpyxlimportl......
  • 用 Python3 & OpenCV 将视频转成字符动画
    在介绍如何用Python3&OpenCV将视频转成字符动画之前,先简单的介绍一下OpenCV吧,毕竟可能很多小伙伴不太了解:百度百科:OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,......
  • python爬虫爬取快手视频多线程下载功能【fd的使用】
    环境:python2.7+win10工具:fiddlerpostman安卓模拟器首先,打开fiddler,fiddler作为http/https抓包神器,这里就不多介绍。配置允许https 配置允许远程连接也就是打开http代理 电脑ip:192.168.1.110然后确保手机和电脑是在一个局域网下,可以通信。由于我这边没有安卓......