深浅拷贝
浅拷贝
a=[[1,2],3,4]
b=a[:] #b=a.copy()
浅拷贝 作用
1 #共享账户 2 husband=['Xiaohu',123,[15000,9000]] #姓名,卡号,额度,余额 3 wife=husband.copy() #浅拷贝 4 wife[0]='Xiaomei' 5 wife[1]=345 6 husband[2][1]-=3000 7 print(wife)
输出
['Xiaomei', 345, [15000, 6000]]
import copy
浅拷贝copy.copy()
深拷贝copy.deepcopy()
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 4 # a=[[1,2],3,4] 5 # b=a.copy() 6 # b[1]='cy' 7 # print(a,b) 8 # b[0][0]=5 9 # print(a,b) 10 import copy 11 #共享账户 12 husband=['Xiaohu',123,[15000,9000]] 13 wife=husband.copy() 14 wife[0]='Xiaomei' 15 wife[1]=345 16 xiaosan=copy.deepcopy(husband) #深拷贝 17 xiaosan[0]='xiaoling' 18 xiaosan[1]=666 19 xiaosan[2][1]-=1999 20 husband[2][1]-=3000 21 print(wife) 22 print(xiaosan)
输出
['Xiaomei', 345, [15000, 6000]]
['xiaoling', 666, [15000, 7001]]
所以说,改变3,4的话不会使a改变,而改变1,2的时候会变。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 a=[[1,2],3,4] 4 b=a.copy() 5 b[1]='cy' 6 print(a,b) 7 b[0][0]=5 8 print(a,b)
输出
[[1, 2], 3, 4] [[1, 2], 'cy', 4]
[[5, 2], 3, 4] [[5, 2], 'cy', 4]
修改可变对象(比如列表)会影响之前,修改不可变对象(整型)不会。
a是一个列表(复杂数据类型),执行b=a之后,a,b共享一个内存空间,b相当于a的别名;而a是一个整型数字(简单数据类型),b=a,再改变a对b无影响。
浅拷贝只会拷贝第一层。一般来说浅拷贝就够了,不然克隆一份会占很多空间。
集合set(重点)
集合对象是一组无序排列的可哈希的值:集合成员可以做字典的键(字典的键要求是可哈希的),集合本身不可以作为键。
创建方式只有一种,s=set(...)
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 s=set('alex li') 4 print(s)
输出
{' ', 'x', 'l', 'i', 'a', 'e'}
可以去重,是一组不同元素的组合,{}括起来。
集合可以和列表相互转换,set(),list(),表象上看转变之后括号变了。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 l=['yangyang','yuanyuan','yangyang'] 4 s=set(l) 5 print(s) 6 l_new=list(s) 7 print(l_new)
输出
{'yuanyuan', 'yangyang'}
['yuanyuan', 'yangyang']
frozenset不可变集合
set集合的更新:add() #添加一个元素
update() #将元素作为序列,遍历添加
remove() #括号内写要删除的元素名
pop() #随机删一个
clear() #清空集合中的元素
del s #删掉集合这个容器
集合的等价print(set('alex')==set('alexexex')) 输出True #等价
子集和超集print(set('alex')==set('alexwwww')) 输出False
交集intersection #等效于a & b #print(a.intersection(b))打印二者公有的元素组成的集合
并集union #等效于a | b
差集difference #等效于a - b #print(a.difference(b))打印在a中却不在b中的元素组成的集合
反向交集(对称差集:集合A与集合B的对称差集定义为集合A与集合B中所有不属于A∩B的元素的集合) #等效于a ^ b symmetric_difference 除去公有元素之外的元素组成的集合
issuperset超集判断 #等效于a > b 例如a.issuperset(b)判断的是a是否为b的超集
issubset子集判断 #等效于a < b
函数
函数!=数学中的function()
计算机函数(语句的封装) == subroutine 子程序 procedure 过程
作用
1.减少重复代码;
2.方便修改,更易扩展;
3.保持代码一致性
函数名命名规则:
下划线或字母开头,由字母、数字、下划线组成,不可使用任意标点;
区分大小写;
不能是保留字(python内部用的名字)。
返回当前时间的操作:import time time_format='%Y-%m-%d %X' time_current=time.striftime(time_format)
关于return:return意味着函数结束。如果没有回返回None;如果返回多个对象,python会把它们封装成元组返回。
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 #高大上加法器 4 def add(*args): #不定长参数 *args元组(无名参数) **kwargs字典(有名参数) 5 print(args) 6 sum=0 7 for i in args: 8 sum+=i 9 print(sum) 10 add(1,2,3,4,5,6)
输出
(1, 2, 3, 4, 5, 6)
21
函数参数位置顺序:关键字参数-默认参数-*args-**kwargs
函数的作用域