今日内容

  • 深浅拷贝(面试)
  • 文件操作

今日内容

  1. 深浅拷贝

    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相同。
  • 字符串,元组,数字---数据类型,不可类型。
  1. 文件操作

内存中默认编码方式为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的更多相关文章

  1. Python笔记 #07# NumPy 文档地址 & Subsetting 2D Arrays

    文档地址:np.array() 1.<class 'numpy.ndarray'> ndarray 表示 n 维度(n D)数组 (= n 行数组). 2.打印 array 结构 —— n ...

  2. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  3. boost.python笔记

    boost.python笔记 标签: boost.python,python, C++ 简介 Boost.python是什么? 它是boost库的一部分,随boost一起安装,用来实现C++和Pyth ...

  4. 20.Python笔记之SqlAlchemy使用

    Date:2016-03-27 Title:20.Python笔记之SqlAlchemy使用 Tags:python Category:Python 作者:刘耀 博客:www.liuyao.me 一. ...

  5. Python笔记——类定义

    Python笔记——类定义 一.类定义: class <类名>: <语句> 类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性 如果直接使用类名修改其属 ...

  6. 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...

  7. 13.python笔记之pyyaml模块

    Date:2016-03-25 Title:13.Python笔记之Pyymal模块使用 Tags:Python Category:Python 博客地址:www.liuyao.me 作者:刘耀 YA ...

  8. 8.python笔记之面向对象基础

    title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...

  9. python笔记 - day8

    python笔记 - day8 参考: http://www.cnblogs.com/wupeiqi/p/4766801.html http://www.cnblogs.com/wupeiqi/art ...

随机推荐

  1. 珠峰-6-http和http-server原理

    ???? websock改天研究下然后用node去搞. websock的实现原理. ##### 第9天的笔记内容. ## Header 规范 ## Http 状态码 - 101 webscoket 双 ...

  2. IntelliJ 更改项目使用的 JDK 版本

    在当前使用的 IntelliJ 中的 JDK 版本为 1.8,如何修改 IntelliJ 使用的 JDK 版本为 1.11 呢? 你可以在 IntelliJ 中进行修改. 选择 File 后,然后选择 ...

  3. CSS中元素的显示模式

     在CSS中,根据元素显示模式的不同元素标签被分为了两类:行内元素(inline-level).块级元素(block-level). 1,首先介绍什么是行内元素,什么又是块级元素? 1.1,行内元素就 ...

  4. Python常用模块sys,os,time,random功能与用法,新手备学。

    这篇文章主要介绍了Python常用模块sys,os,time,random功能与用法,结合实例形式分析了Python模块sys,os,time,random功能.原理.相关模块函数.使用技巧与操作注意 ...

  5. springboot容器加载完毕执行某一个方法

    问题: 最近做项目(项目使用的是springboot)的时候,数据库有一个配置参数表,每次都要查询数据库去做数据转换,这样每次查询数据库感觉不太友好,后来写了一个方法项目启动完成后立即执行此方法,将配 ...

  6. SVN仓库备份和迁移

    SVN仓库备份和迁移 author: yunqimg(ccxtcxx0) 前言 本文主要是讲 SVN 仓库的全量备份和增量备份,只包括基本操作. 如有疑问请参考 References. 仓库备份 sv ...

  7. Win10多用户同时登陆远程桌面

    想记录一下最近解决的一些问题,发现还是博客最合适,虽然之前从来没写过,希望以后能养成这个好习惯. 家里有一台台式机装着Win10,还有一台macbook,平时遇到需要用Win系统又不想坐在书桌前时,我 ...

  8. [CF1311B] WeirdSort

    Solution 按照 \(p[i]\) 进行分段,如果某个 \(k\) 不存在 \(p[i]=k\),那么就把 \(i,i+1\) 分割开 处理出每一段的左端点和右端点 进而处理出每段的最小值和最大 ...

  9. TP框架上传图片至阿里云oss

    首先安装阿里云oss扩展: composer require aliyuncs/oss-sdk-php 如果这个安装不上可以直接下载SDK的包: 链接:https://pan.baidu.com/s/ ...

  10. JVM和线程池

    本文链接:https://blog.csdn.net/liuwenliang_002/article/details/90074283 ————————————————版权声明:本文为CSDN博主「3 ...