day03_20190113

一、深浅copy
赋值运算 变量指向同一个地址
l1 = [1,2,3]
l2 = l1
l3 = l2
l1.append(666)
print(l1,l2,l3)
print(id(l1),id(l2),id(l3))
运行结果:
[1, 2, 3, 666] [1, 2, 3, 666] [1, 2, 3, 666]
1543171498568 1543171498568 1543171498568

1、浅copy:copy一个新列表(dict),列表在内存中是新的,但是列表里面的元素,完全沿用之前的元素。
l1 = [1, 2, 3,[22,33]]
l2 = l1.copy()
print(id(l1),id(l2))
print(id(l1[0]),id(l2[0]))
l1[0] = 2
l1[-1].append(88)
l2[-1].append(99)
l1.append(666)
l2.append(999)
print(l1,l2)
print(id(l1[0]),id(l2[0]))
运行结果:
2229585298248 2229585223176
140732471497760 140732471497760
[2, 2, 3, [22, 33, 88, 99], 666] [1, 2, 3, [22, 33, 88, 99], 999]
140732471497792 140732471497760
例子:
l1 = [1, 2, 3, [22, 33]]
l2 = l1[:] # 切片 是 浅copy
l1[-1].append(666)
print(id(l1),id(l2)) #不是赋值关系
print(l1,l2)
运行结果:
2122900693448 2122900610184
[1, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33, 666]]

2、深copy
import copy
# 总结:深copy则会在内存中开辟新空间,将原列表以及列表里面的可变的数据类型重新创建一份,
# 不可变的数据类型则沿用之前的。
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1), id(l2))
print(id(l1[0]),id(l2[0]))
print(id(l1[-1]),id(l2[-1]))
l1[0] = 2
l1[-1].append(666)
print(l1,l2)
运行结果:
2522273468936 2522273389832
140732471497760 140732471497760
2522273604680 2522273605000
[2, 2, 3, [22, 33, 666]] [1, 2, 3, [22, 33]]

小知识点:
# id 测试对象的内存地址
# == 比较 比较两边的数值是否相等
# print(2 == 2)
# is 判断 判断的两边对象的内存地址是否是同一个。

03 文件操作

之前对文件进行的任何操作,都必须依赖一个文件编辑器,word wps等等
假设一个场景:
现在世界上没有任何个文件编辑器的产生。
'空姐护士白领学生联系方式'.txt
设计这个软件必要的三要素:
path:文件的路径。
encoding:文件以什么编码方式存储,就以什么编码方式读取。
mode:读,写,写读,读写,追加,改等等。
三个大方向:
带b的模式操作对象都是非文字类的文件:视频,音频,图片。
读(r rb r+ r+b)
r模式
rb
r+ 读写


写 w wb w+ w+b
w
wb

追加(a ab a+ a+b)
a

文件操作的其他方法:
f.read()
f.write()
f.readline()
f.readlines()
f.close()
f.seek()
f.tell()

扫描二维码关注公众号,回复: 4936624 查看本文章

04 函数的初识
什么是函数
函数的结构
函数的返回值
函数的参数
05 函数的进阶
名称空间
作用域
加载顺序
取值顺序
内置函数 locals() globals()
高阶函数(函数的嵌套)
nonlocal global
函数名的作用

猜你喜欢

转载自www.cnblogs.com/linux985/p/10275289.html