为什么这么困啊,怎么每天都这么困啊,我感觉我快羽化而登仙了啊干!

但是就算我这么困,我也还是要给你们打气,今天的憨憨们有没有给自己打气啊!相信自己,哦吼吼吼吼吼

今日洗脑金句:今天不学习,明天变傻逼。

python深浅拷贝

一、引言

在python中, 对象赋值实际上就是对象的引用。当创建一个对象,然后把它赋值给另一个变量的,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

针对一个列表,一般有三种方法,分别为为拷贝、浅拷贝、深拷贝

注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的

1.1、可变or不可变

这个没什么好讲的,之前都讲过了,深浅拷贝只针对可变数据类型而言,也就是列表啊字典啊元组啊集合啊之类的,我不知道还有没有其他的,我只知道这么多,别问,问就是只知道这么多

二、拷贝

我们之前说过了什么?

对,什么也没说过。

其实,拷贝就是赋值啦。意思是什么呢,就是a如果是b的拷贝对象,那么如果b的内部有什么变化,a都会变,b拉坨屎,a的体重也会减轻。因为他俩是同一根绳子上的蚂蚱啊,引用的对象都是同一个啊,所以随便哪个变量对这个内存地址的内容改变,都会使全部指向这块内存地址的变量的变量值同时改变。

l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = l1l1.append('g')print(l1)

['a', 'b', 'c', ['d', 'e', 'f'], 'g']

print(l2)

['a', 'b', 'c', ['d', 'e', 'f'], 'g']

三、浅拷贝

浅拷贝是一个比较叼的东西,方便大家理解,我只好祭出我璀璨星辰般的画技了。

import copy
a=[100,200,300,[666,SB,'-.-']]
b=copy.copy(a)
a.append('NB')
print(a)
print(b)

a的结果是什么很明显,a=[100,200,300,[666,'SB','-.-'],'NB']

那这个时候b呢? b=[100,200,300,[666,'SB','-.-']],能理解吗,因为copy.copy方法相当于是在内存里面重新开辟了一个空间来放了一个和a一毛一样的列表,所以a的改变不会引起b的改变。

那么! 如果

a[3].append('hahaha')
print(a)
print(b)

这个的结果会是什么呢?

a=[100,200,300,[666,'SB','-.-','hahaha'],'NB']

b=[100,200,300,[666,'SB','-.-','hahaha'],'NB']

这个时候的你,一定满头疑惑,为什么啊,不是说说两个内存不同的吗,都是单独的啊,哦,敢情我给你们画的图都白瞎了?给老子看上面的图,看到没,虽然他们是两个内存空间,但是他们的元素如果也是可变类型的话,那是不会开辟新空间的,就会指向同一个了,然后这时候这个内置列表的值改变了,由于他们都指向它,所以都会改变,这就是浅拷贝。懂了吧。

别急,你们一定不懂的。慢慢想想。

nick:“都听懂了吧!”

所有学生:

nick:“没事....九期讲了三次呢”

四、深拷贝

既然从拷贝到浅拷贝你们都看过了,那你们一定发现了规律了吧,深拷贝一定比浅拷贝还要叼一点的东西。

没错,深拷贝的东西,随你原来的怎么搞,他都不变化。

import copyl1 = ['a', 'b', 'c', ['d', 'e', 'f']]
l2 = copy.deepcopy(l1)l1.append('g')print(l1)

['a', 'b', 'c', ['d', 'e', 'f'], 'g']

print(l2)

['a', 'b', 'c', ['d', 'e', 'f']]

l1[3].append('g')print(l1)

['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']

print(l2)

['a', 'b', 'c', ['d', 'e', 'f']]

综上所述:就一句话概括了这仨。

拷贝: 当b为a的拷贝对象时,a内的可变类型变化,b变化;a内的不可变类型变化,b变化, 简单的赋值。

浅拷贝:当b为a的浅拷贝对象时,lt内的可变类型变化,b变化;a内的不可变类型变化,b不变化,copy.copy() ,可变数据的类型中的内置方法.copy()

深拷贝: 当b为a的深拷贝对象时,a内的可变类型变化,b不变化;a内的不可变类型变化,b不变, copy.deepcopy()

草。。怎么是三句话

异常处理

一、什么是异常

擦,这也要问。

异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下

1.1语法错误

语法错误,根本过不了python解释器的语法检测,必须在程序执行前就改正。

# 语法错误示范一
if# 语法错误示范二
def test:pass# 语法错误示范三
class Foopass# 语法错误示范四
print(haha

1.2 逻辑错误

# TypeError:int类型不可迭代
for i in 3:pass# ValueError
num=input(">>: ") #输入hello
int(num)# NameError
aaa# IndexError
l=['egon','aa']
l[3]# KeyError
dic={'name':'egon'}
dic['age']# AttributeError
class Foo:pass
Foo.x# ZeroDivisionError:无法完成计算
res1=1/0
res2=1+'str'

二、异常种类

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,一个异常标识一种错误。

异常的种类有很多,可以讲,但是没有必要,因为你只需要一个万能报错就可以了

Exception

#基本语法为
try:被检测的代码块
except 异常类型:try中一旦检测到异常,就执行这个位置的逻辑

只用在异常类型那里写Exception就可以了,什么错误都能抓取。

试问你在考虑是用斧头杀猪还是用砍山刀杀猪的时候,有一门炮你还想那么多干什么?

try....except总结

把错误处理和真正的工作分开来

代码更易组织,更清晰,复杂的工作任务更容易实现;

毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;

抛出异常和断言就随便一笔带过吧,因为真的没有用, 抛出异常是什么,主动报错,这不是有病吗?

程序好好的,加了一句抛出异常,至少这不是我现有阶段会去接触的东西,断言呢,最早的时候没有pycharm,那这个做调试,一辈子都用不上了。

对于异常处理这个功能,我觉得比较多余,为什么呢,因为你一定会在可能出错的地方写try except,既然你都知道什么地方会错,那你直接去找错误就完事儿了,搞些花里胡哨的东西干什么。

基本的文件操作

一、文件是什么?

这个不讲了,前面讲过了

二、为什么要有文件?

内存无法永久保存数据,但凡我们想要永久保存数据都需要把文件保存到硬盘中,而操作文件就可以实现对硬件的操作。

三、如何用文件?

现在我们有一个需求需要把用户输入的账号密码存储到硬盘中,我们使用Python该如何操作呢?

name = 'nick'
pwd = '123'

3.1从硬盘读取数据

如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt')

如果给列表增加值,我们需要给列表赋值后才能给对应的列表增加值。文件也是如此。

lis = [1,2,3]
lis.append(4)
lis.append(5)
# 打开文件
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt')
print(f)

<_io.TextIOWrapper name='/Users/mac/desktop/jupyter/pythonCourseware/32.txt' mode='r' encoding='UTF-8'>

打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。

# read模式打开文件
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r')
# 读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
data = f.read()
print(data)
# 由于Python的垃圾回收机制只回收引用计数为0的变量,但是打开文件还占用操作系统的资源,所以我们需要回收操作系统的资源资源
# del f 只是回收变量f
f.close()

name = 'nick'
pwd = '123'

3.2写入数据

# write模式打开文件
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='w')
f.write("""name = 'nick'
pwd = '123'""")
f.close()
f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r')
data = f.read()
print(data)

name = 'nick'
pwd = '123'

CV好爽啊。

好他妈闪啊,我的眼睛看不见了

简单汇总一下

打开文件总而言之分为三步:

  1. 打开文件
  2. 读写
  3. 关闭

绝对路径和相对路径

一、绝对路径

  • Windows系统绝对路径从盘符(C:、D:)开始写一个完整的路径。
  • macos系统从根目录(/Users)开始写一个完整的路径。

二、相对路径

相对于当前执行文件所在的文件夹开始找。

f = open('32.txt')  # 32.txt与该.md文档同路径位置

莫得了,别看了,今天内容就到这里了,撒花,鼓掌

转载于:https://www.cnblogs.com/chanyuli/p/11311278.html

Day9之深浅拷贝大法相关推荐

  1. python基础(三元运算+深浅拷贝+函数参数)

    三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 1 书写格式: 2 result = 值1 if 条件 else 值2 3 即如果条件成立,则将值1赋给result ...

  2. python——赋值与深浅拷贝

    结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一--python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时间来 ...

  3. python之深浅拷贝

    对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. import copy # ######### 数字.字符串 ######### n1 = 123 # n1 ...

  4. Java中深浅拷贝之List

    List的浅拷贝 浅拷贝将引用复制.指向的是同一个地址,改变A和B中的任何一个,另一个都会随之发生变化. List浅拷贝(针对List里 装的是对象-----"引用"[基础类型不分 ...

  5. Python的深浅拷贝讲解!

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:皮钱超,厦门大学,Datawhale原创作者 本文约3000字,建 ...

  6. 【Python基础】Python的深浅拷贝讲解

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中 ...

  7. 是时候捋一捋Java的深浅拷贝了

    在开发.刷题.面试中,我们可能会遇到将一个对象的属性赋值到另一个对象的情况,这种情况就叫做拷贝.拷贝与Java内存结构息息相关,搞懂Java深浅拷贝是很必要的! 在对象的拷贝中,很多初学者可能搞不清到 ...

  8. set集合, 深浅拷贝, join, 列表和字典在循环中删除元素的问题, fromkeys( , )

    一. set集合 空集合 a = set() set集合内的元素必须可哈希(不可变), int, str, bool, tuple set3 = {'1','alex',2,True,(1,2,[2, ...

  9. 编码,深浅拷贝和文件操作

    三.再谈编码 小数据池,  常量池, id() 查看变量的内存地址 is和== is 判断内存地址是否一致 == 判断内容是否一致 小数据池的作用: 为了快速的创建字符串对象, 可以减少内存的浪费 用 ...

最新文章

  1. linux如何查看指定目录下文件内容,Linux 系统下通过关键词查找指定目录下的文件内容...
  2. UVA 11990 ``Dynamic'' Inversion 动态逆序对
  3. poj3508(高精度模拟减法)
  4. 马斯克一作!Neuralink脑机接口细节公布,特殊材料防大脑损伤,专用芯片助技术落地...
  5. Go 语言编程 — net/http — 支持 HTTPS
  6. struct的成员对齐
  7. 面试题 17.24. 最大子矩阵
  8. layui多级联动下拉框的实现_简单三级联动的实现
  9. 【Django】毕设学习笔记(六)
  10. php跨域传sessionid,php中http与https跨域共享session的解决方法
  11. OpenCV-基本图形绘制(圆、矩形、椭圆)
  12. 怎样利用商业智能软件实现业务目标
  13. 深入理解计算机操作系统(六)
  14. openai-gpt_OpenAI的GPT-3:货物崇拜编程人员的终结
  15. 电脑重装系统后c盘数据能恢复吗c盘重装后可以数据恢复吗
  16. SaaSpace:11 款最佳免费备份软件工具
  17. 红米k30s至尊纪念版发布会直播地址红米k30s至尊纪念版发布会在线观看入口
  18. 查词app android教程,英语查单词app哪个好_查单词app推荐_专门查单词的app
  19. 简单的员工信息管理系统
  20. OpenCV 学习笔记(5) 使用opencv打开笔记本摄像头

热门文章

  1. vue使用高德地图小demo(标记点,画线,3D,叠加图片图层)
  2. 数组的应用和面向对象的开始6
  3. [LOJ575]不等关系
  4. 艾宾浩斯记忆遗忘曲线-背单词
  5. Ardupilot多旋翼自动规划路径实现绕开障碍物避障
  6. 第一件 免费杀毒软件下载
  7. Mixed mode assembly is built against version 'v1.1.4322' of the runtime and...问题——C# DirectXSound
  8. 【Unity3D】阴影原理及应用
  9. RTL8372-CG/RTL8373-CG
  10. Java 8计算两个日期之间的月份