day15_字典、元组、集合、深浅拷贝
字典
定义
按key:value的格式,在{}内以逗号隔开,存放多个元素
key :不可变数据类型
value :任意数据类型
dic = dict() # 定义空字典
dic = {} # 定义空字典
dic = {'name':'alex','age':18,'hobby_list':['music','dapao']} # 定义字典
常用方法
dic[key] # 按key获取value值,若无该key,程序报错
dic[key] = value # 字典中有这个key,修改对应的value值,若字典中没有这个key,则添加这个键值对
len(dic) # 求字典长度(包含键值对个数)
del dic[key] # 按key删除删除键值对
print(x in dic) # 成员运算
for key in dic # 遍历字典的key
for key in dic.keys() # 遍历字典中的key
for value in dic.values() # 遍历字典的value
for item in dic.items() # 遍历字典的键值对,item取值后以元组存储
for key,value indic.items() # 等于对上一个item的解压缩
内置方法
dic.keys() #
dic.values() #
dic.items() #
dic.pop(key) # 按key弹出一个键值对元素,返回值是对应的vlaue
dic.popitem() # 随机弹出一个键值对,以元组返回(key,value)
dic[key] # 按key获取value值,若无该key,程序报错
dic.get(key) # 按key获取value值,若无该key,程序不会报错
dic[key] = value # 字典中有这个key,修改对应的value值,若字典中没有这个key,则添加这个键值对
dic.update(**kwargs) # 字典中有关键字实参名的key,就更新对应的vlaue,没有就添加键值对
dic.copy() # 复制后的dic,值的修改不会影响原来的dic
dic.setdefault(key,value) # 字典中有这个key,就不修改,字典中没有这个key就添加这个键值对
dic.fromkeys([key1,key2,key3,...],value) # 新建字典,默认值都为value,key用列表,元组,等可迭代对象传入
dic.clear() # 清空字典
可变/不可哈希
dic = {'name':'nick'}
print(dic,id(dic))
dic['age'] = 18
print(dic,id(dic))
'''
{'name': 'nick'} 2366442570200
{'name': 'nick', 'age': 18} 2366442570200
'''
元组
定义
在()内以逗号隔开,存储多个元素,当为一个元素时,需加上逗号,与运算优先级()进行区分
除了不可变,与列表相同
tup = tuple() # 定义空元组
tup = () # 定义空元组
tup = ('a','b',2,5,[1,2,3]) # 可以存储可变元素,但是tup本身不可变
常用方法
除了不可变,与列表相同
不可变/可哈希
tup = (1,2)
print(tup,id(tup))
tup = (1,2,4)
print(tup,id(tup))
'''
(1, 2) 1841682939080
(1, 2, 4) 1841685233560
'''
集合
定义
在{}内以逗号分隔,存储多个不可变元素
重复的值,只取第一个
无序
s = set() # 定义空集合,只能使用这个方式定义空集合
s = {'a','b',1,3,2}
print(s)
常用方法
| # 并集
& # 交集
- # 差集
^ # 交叉补集
内置方法
s.remove(element) # 删除不可变元素,当删除的元素不存在,程序报错,返回值为None
s.discard(element) # 删除不可变元素,当删除的元素不存在,程序不报错,不管存不存在,都返回None
s.add(element) # 添加不可变元素
s.pop()
s.clear()
s.copy()
s.update(s)
可变/不可哈希
s = {'a','b',1,3,2,4}
print(s,id(s))
s.add(5)
print(s,id(s))
'''
{1, 2, 3, 4, 'b', 'a'} 1845526130248
{1, 2, 3, 4, 5, 'b', 'a'} 1845526130248
'''
深浅拷贝
针对可变数据类型而言
当变量为可变数据类型,变量值的改变,不会改变内存地址
拷贝
只添加对变量的引用
当通过变量的任意一个引用改变变量值,该值的所有引用的值同样会改变,因为内存地址没变
lt = [1,2]
lt1 = lt
print(lt,lt1,id(lt),id(lt1))
lt.append(3)
print(lt,lt1,id(lt),id(lt1))
'''
[1, 2] [1, 2] 2909969404488 2909969404488
[1, 2, 3] [1, 2, 3] 2909969404488 2909969404488
'''
浅拷贝
复制拷贝对象中的不可变元素,存储到新的内存空间,同时对拷贝对象中的可变元素添加引用
当拷贝对象或者拷贝得到的对象中的不可变元素发生变化,不会对另一个产生影响,当拷贝对象或者被拷贝对象中的可变元素发生变化,另一个的可变元素也会发生同步变化
import copy
lt = [1,3,[2,4]]
print(lt,id(lt),id(lt[2]))
lt1 = copy.copy(lt)
print(lt1,id(lt1),id(lt1[2]))
lt.append(5)
print(lt,id(lt),id(lt[2]))
print(lt1,id(lt1),id(lt1[2]))
lt1[2].append(6)
print(lt,id(lt),id(lt[2]))
print(lt1,id(lt1),id(lt1[2]))
'''
[1, 3, [2, 4]] 2696187565128 2696187564616
[1, 3, [2, 4]] 2696337515208 2696187564616
[1, 3, [2, 4], 5] 2696187565128 2696187564616
[1, 3, [2, 4]] 2696337515208 2696187564616
[1, 3, [2, 4, 6], 5] 2696187565128 2696187564616
[1, 3, [2, 4, 6]] 2696337515208 2696187564616'''
深拷贝
复制拷贝对象中元素,存储到新的内存空间
当拷贝对象或者拷贝得到的对象中的元素发生变化,另一个不会发生变化
import copy
lt = [1,3,[2,4]]
print(lt,id(lt),id(lt[2]))
lt1 = copy.deepcopy(lt)
print(lt1,id(lt1),id(lt1[2]))
lt.append(5)
print(lt,id(lt),id(lt[2]))
print(lt1,id(lt1),id(lt1[2]))
lt1[2].append(6)
print(lt,id(lt),id(lt[2]))
print(lt1,id(lt1),id(lt1[2]))
'''
[1, 3, [2, 4]] 2239576364040 2239576363528
[1, 3, [2, 4]] 2239697964488 2239577634248
[1, 3, [2, 4], 5] 2239576364040 2239576363528
[1, 3, [2, 4]] 2239697964488 2239577634248
[1, 3, [2, 4], 5] 2239576364040 2239576363528
[1, 3, [2, 4, 6]] 2239697964488 2239577634248
'''

浙公网安备 33010602011771号