py深浅拷贝,文件操作
回顾&补充
- 独有功能叫方法
- range是默认随机生成一段数字
- range/type/id
一,深浅拷贝
浅拷贝只拷贝第一层,深拷贝拷贝嵌套层次中所有可变类型
深浅拷贝需要先引用模块import copy
例子: v = [1,12,34,33,[33,44]] import copy vv = copy.deepcopy(v)
1.深拷贝
- copy.deepcopy
- 深拷贝里面所有可变类型拷贝一遍
a = "sss"
b = copy.deepcopy(a)
例子:
v = [1,12,34,33,[33,44]]
import copy
vv = copy.deepcopy(v)
print(id(vv[3]),id(v[3]))
输出结果:1868596336 1868596336
print(id(vv[4]),id(v[4]))
输出结果:1902741508552 1902741297416
2浅拷贝
- copy.copy
- 浅拷贝就是把列表里面的空壳拷贝,里面元素地址还是原来的
a = "ss"
b = copy.copy(a)
例子:
v = [1,12,34,33,[33,44]]
import copy
vv = copy.copy(v)
print(id(vv[3]),id(v[3]))
输出结果:1868596336 1868596336
print(id(vv[4]),id(v[4]))
输出结果2663470471432 2663470471432
!深拷贝浅拷贝一般情况下没有区别,只有在嵌套时才有区别
不可变类型拷贝,不会拷贝,地址一样
特殊情况:如果元组里面都是不可变的,不会改变原来的地址,如果里面有可变,深拷贝会把元组拷贝一遍
实例: ##拷贝可变类型,能够拷贝,在内存开辟一个空间,地址不一样 v = [1,12,34,33,[33,44]] import copy vv = copy.deepcopy(v) print(id(vv),id(v)) 输出结果:1664607524872 1664605100808 ##不可变类型拷贝,不会拷贝,地址一样 v = (1,12,34,33,[33,44]) import copy vv = copy.copy(v) print(id(vv),id(v)) 输出结果:2831372300448 2831372300448 v = (1,12,34,33,[33,44]) import copy vv = copy.deepcopy(v) print(id(vv[4]),id(v[4])) 输出结果:2754557676624 2754555654304 ##特殊情况:如果元组里面都是不可变的,不会改变原来的地址,如果里面有可变,深拷贝会把元组拷贝一遍
二,文件操作
1.写入
r是只读,w是只写(先清空文件),a是只写(只添加不能读)
file_object.seek()指定光标位置
可读可写
r+ (**)常用程度
读:,默认光标位置0,读时默认从最开始读
写:根据光标的位置从当前光标位置开始进行操作,会覆盖当前光标后面的值
w+ (**)常用程度
读:默认光标最后或0,读取时需要调整光标位置
写:先清空
a+ (*)常用程度
读:默认光标位置在最后,读需要调整光标位置
写:写入时不论怎么调整光标位置,永远写到最后
读取文件
例子: file.object = open (”文件“,mode="r",encoding="编码") 读取文件: 变量 = file.object print(变量) 关闭文件 file_object.close ## r 不能新建,文件不存在报错
写入文件
例子: file_object = open (”文件“,mode="w",encoding="编码") 写入文件: file_object.write("写入内容") 关闭文件 file_object.close ## w 权限一般用于新建,文件不存在新建 例子: file_object = open (”文件“,mode="a",encoding="编码") 写入文件: file_object.write("写入内容") 关闭文件 file_object.close ## a 只添加不能读,不存在就新建
2.操作
.read把文件所有内容读取到内存
.read(2)当前光标向后读取两个字符
.readliens把所有文件到内存,并按照行到列表
读取大文件:用循环循环读取,.strip能够去掉换行(***********)
写文件操作:file_object.write("你好,小黑"/n)
file_object.write("你好,小白)