Day 07 元组/字典/集合/python深浅拷贝
元组
作用
存储数据,元组一创建就被写死了,元组的值不可以被修改
定义
在()内用逗号隔开多个元素,元素可以是任意数据类型
内置方法
- 索引取值
- 切片
- 长度len
- 成员运算
- for循环
- count
- index
元组与列表的区别
列表可变的原因是:索引所对应的值的内存地址是可以改变的
元组不可变得原因是:索引所对应的值的内存地址是不可以改变的,或者反过来说,只要索引对应值的内存地址没有改变,那么元组是始终没有改变的。
字典
作用
存放多个元素,但是每一个元素都有一个对应的key值,key具有描述功能
定义
在{}内用逗号隔开每一个键值对,每一个键值对有以key:value的形式存放,key只能为不可变数据类型,一般为字符串型,value可以为任意数据类型
内置方法
-
按key取值/修改/增加
-
长度len
-
成员运算
-
删除del
dic = {'a': 1, 'b': 2} del dic['a'] print (dic)
-
键keys(), 值values(), 键值对items()
dic = {'a': 1, 'b': 2}
print(dic.keys())
print(dic.values())
print(dic.items())
dict_keys(['a', 'b'])
dict_values([1, 2])
dict_items([('a', 1), ('b', 2)])
-
for循环
-
get
dic = {'a': 1, 'b': 2} print(dic.get('a')) print(dic.get('c'))
1
None -
update
dic1 = {'a': 1, 'b': 2} dic2 = {'c': 1, 'b': 3} dic1.update(dic2) print(dic1)
{'a': 1, 'b': 3, 'c': 1}
注意:有相同的键会直接替换成 update 的值
-
fromkeys
dic = dic.fromkeys('a', 'b', 'c') print(dic)
-
setdefault
dic = {'a': 1, 'b': 2} print(dic.setdefault('a', 3)) print(dic.setdefault('c', 3)) print(dic)
1
3
集合
作用
可以用来去重,但是去重后集合内元素的顺序会被打乱
定义
{}内用逗号隔开多个元素,每个元素必须是不可变类型
内置方法
-
长度len
-
成员运算
-
|并集
-
&交集
-
-差集
-
^对称差集
-
==
-
父集>, >=
-
子集<, <=
-
add 增加元素
-
remove 删除元素,若元素不在集合中则会报错
-
difference_update
s = {'a', 'b', 'c'} s1 = {'a', 'd', 'e'} s.difference_update(s1) # 集合s除去与集合s2共同的元素 print(s)
-
discard 删除元素,若元素不在集合中则不会发生变化
-
isdisjoint 判断集合是否有共同部分,有就返回True,没有就返回False
python深浅拷贝
注意:拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的
可变与不可变
值变id不变,为可变数据类型;值变id也变,则为不可变数据类型
拷贝
如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。
浅拷贝
如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。
深拷贝
如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。