python笔记07
今日内容
- 深浅拷贝(面试)
- 文件操作
今日内容
深浅拷贝
v1=[1,2,[34,67,9]]
import copy
浅拷贝:
拷贝第一层
v2=copy(v1)---将v1的地址copy,最外层壳拷贝一份,内层变量指向地址不变。
id(v1[2]),id(v2[2])--相同
id(v1),id(v2)---不相同,不拷贝内部变量地址
深拷贝:
v1=[1,2,[34,67,9]]
import copy
深拷贝:
拷贝所有数据(可变)
V3=deepcoyy(v1)---将v1中可变类型地址进行拷贝。适合嵌套的类型
id(v1),id(v2)--不同
id(v1[2],id(v2[2))--不同,内部变量地址也拷贝
实例验证:
import copy
v1=[1,2,[34,67,9]]
v2=copy.copy(v1)
print(id(v1),id(v2))
print(id(v1[2]),id(v2[2]))
v3=copy.deepcopy(v1)
print(id(v1),id(v3))
print(id(v1[2]),id(v3[2]))
输出:
39290696 39291976
39290504 39290504
39290696 39291912
39290504 39291848
总结:
- 深浅拷贝只针对可变类型。如果只有一层,深、浅拷贝拷贝相同。
- 浅拷贝:只拷贝第一层。内部元素指向不变。
- 深拷贝:拷贝嵌套层次中所有的可变类型。不可变类型指向不变,可变类型重新复制一份,可变类型内的元素指向还是指向原先的位置。(内部元素其实也拷贝,但是为数字,字符串常见元素,所以位置不变)
特殊情况:
v1=(1,2,3)
import copy
v2=copy.copy(v1)
print(id(v1),id(v2))
v3=copy.deepcopy(v1)
print(id(v1),id(v3)
元组不可变,所以深浅拷贝的id都不变。
v1=(1,2,3,[3,4,5])
import copy
v2=copy.copy(v1)
print(id(v1),id(v2))
v3=copy.deepcopy(v1)
print(id(v1),id(v3)
- 深浅拷贝只针对可变类型。
- 元组内有可变类型(不可变类型内部有可变类型),深拷贝时,需要重新再创建一份,所以深拷贝后id会变化。
- 深拷贝v3变化,v2与v1相同。
- 字符串,元组,数字---数据类型,不可类型。
- 文件操作
内存中默认编码方式为unicode;文件操作包括:打开,操作,关闭。
打开
- r,只能读。 【**】
- w,只能写,写之前清空。 【**】
- a,只能追加。【*】
- r+
- 读:默认从0的光标开始读,也可以通过 seek 调整光标的为位置。
- 写:从光标所在的位置开始写,也可以通过 seek 调整光标的位置。
- w+
- 读:默认光标永远在写入的最后或0,也可以通过 seek 调整光标的位置。
- 写:先清空。
- a+
- 读:默认光标在最后,也可以通过 seek 调整光标的位置。然后再去读取。
- 写:永远写到最后。
操作
- 读
- read()
- read(n) # 光标所在位置,后读取n个字符。
- readlines()
- write
- 读
关闭
文件读取流程:
file_object=open('log.txt',mode='r',encode='utf-8')
content=file_object.read()
print(content)
file_object.close()写入流程:
file_object=open('log.txt',mode='w',encode='utf-8') ##w只写,打开瞬间清除已经存在的数据,一般用于新建。
file_object.write('zhangsan')
file_object.close()操作类型:
a:追加,在文件尾部追加。
r:只读,文件不存在报错。
w:只写,先清空,一般用于文件不存在新建。
a:追加。文件不存在,新建。
可读可写:r+
写入:根据光标的位置,从当前光标位置开始写入操作(可能会覆盖其他文字)。
file_object.seek(2)#调整光标的位置。
file_object=open('log.txt',mode='r+',encode='utf-8')
file_object.write(你好)##有个光标。先写入,在开始0字节写入你好,覆盖前两个字。
content=file_object.read()
print(content)
file_object.write(6666)
file_object.close()
w+:
默认光标在最后。
写入时候将文件清空,读取时候需要调整光标位置。
如果先读取,再写入,光标已经在写入的后面,在读取的时候,无法读取光标前面的内容。
需要将光标移动至前面,file_object.seek(0),才可以读取到内容。
可读可写:a+
默认光标在文件最后,读取内容需要将光标移动至最前面,file_object.seek(0)
如果调整光标位置:file_object.seek(0),写入内容,还是写在现在内容后
r+:
data=file_objcet.read(n)###读从当前光标位置读取n个字符
file_object.readlines()###按照行读取,按照列表存入。
如果读取特别大的文件:
按行读取:
for line in file_object:
print(line.strip()) ##去掉换行符号
写操作:
file_object=open('log.txt',mode='w',encode='utf-8')
file_object.write('wxwlllxx\n') ###第一次写入的时候,在最后添加换行符,再次写入的时候就不会清空,内容在换行符光标的后面进行第二次内容写入。
file_object.write('ix;wxmslhs')
###这里写入的内容就包括第一次和第二次写入的内容,两部分。
print(content)
file_object.close()
总结
- 深浅拷贝
- 文件操作
- 打开
- 读写
- 关闭
- 文件操作和数据类型的结合使用。
python笔记07的更多相关文章
- Python笔记 #07# NumPy 文档地址 & Subsetting 2D Arrays
文档地址:np.array() 1.<class 'numpy.ndarray'> ndarray 表示 n 维度(n D)数组 (= n 行数组). 2.打印 array 结构 —— n ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- boost.python笔记
boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...
- 20.Python笔记之SqlAlchemy使用
Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...
- Python笔记——类定义
Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...
- 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...
- 13.python笔记之pyyaml模块
Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...
- python笔记 - day8
python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...
随机推荐
- [Python]公司接口返回值规范
返回值规范 json { "code":200, "message":"" "data":[ { "title ...
- Serverless + Egg.js 后台管理系统实战
本文将介绍如何基于 Egg.js 和 Serverless 实现一个后台管理系统 作为一名前端开发者,在选择 Nodejs 后端服务框架时,第一时间会想到 Egg.js,不得不说 Egg.js 是一个 ...
- Hibernate入门之创建数据库表
前言 Hibernate 5.1和更早版本至少需要Java 1.6和JDBC 4.0,Hibernate 5.2和更高版本至少需要Java 1.8和JDBC 4.2,从本节开始我们正式进入Hibern ...
- 会话技术中的Cookie与session
关于会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:C ...
- #《Essential C++》读书笔记# 第一章 C++ 编程基础
前言 Stanley B.Lippman 先生所著的<C++ Primer>是学习C++的一本非常优秀的教科书,但<C++ Primer>作为一本大部头书,显然不适合所有的初学 ...
- Are You Ready……Go?
Are You Ready……Go? 2019-11-01 12:03:10 Problem 你……到底有没有想好要干什么? 又是期中考试,又是CSP,怎么抉择? 未来太渺茫? 我不知道我到底想要什么 ...
- 破解“低代码”的4大误区,拥抱低门槛高效率的软件开发新选择 ZT
最近,每个人似乎都在谈论“低代码”.以美国的Outsystems.Kinvey,以及国内的活字格为代表的低代码开发平台,正在风靡整个IT世界.毕竟,能够以最少的编码快速开发应用的想法本身就很吸引人.但 ...
- windows 2008r2+php5.6.28搭建详细过程
安装IIS7 1.打开服务器管理器(开始-计算机-右键-管理-也可以打开),添加角色 直接下一步 勾选Web服务器(IIS),下一步,有个注意事项继续下一步(这里我就不截图了) 勾选ASP.NET会弹 ...
- 剑指offer-面试题38-字符串的排列-全排列
/* 题目: 输入字符串,打印字符串的所有排列. 输入acc,输出[acc, cac, cca]. */ /* 思路: 将字符串看作两部分,第一个字符串和后面的部分. 将第一个字符串与后面字符串依次交 ...
- mysql 表分区操作
//不支持动态创建分区CREATE TABLE `rpt_exp_event_bucket_creative_d_across` ( `bucket_id` VARCHAR(200) NOT NULL ...