深浅拷贝
程序员文章站
2024-01-18 14:53:58
1. 基础数据类型补充 之前已经发过大多数的基本数据类型的知识 join()把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串 split() 切割. 切割的结果是列表 列表和字典: 都不能在循环的时候直接删除 把要删除的内容记录在新列表中然后循环这个新列表. 删除列表 ......
1. 基础数据类型补充
之前已经发过大多数的基本数据类型的知识
join()把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串
split() 切割. 切割的结果是列表
列表和字典: 都不能在循环的时候直接删除
把要删除的内容记录在新列表中然后循环这个新列表. 删除列表(字典)
删除球类 lst = ["篮球", "足球", "羽毛球", "台球", "网游"] li = [] for el in lst: if "球" in el: li.append(el) for el in li: lst.remove(el) print(lst) #["网游"]
fromkeys()
易错1: 返回新字典. 不会更改老字典
dic = {} xdic = dic.fromkeys("我是","嘿嘿嘿") print(dic) # {} print(xdic) # {'我': '嘿嘿嘿', '是': '嘿嘿嘿'}
易错2: 当value是可变的数据类型. 各个key共享同一个可变的数据类型. 其中一个被改变了. 其他都跟着变
d = dict.fromkeys("我是",[]) print(d) # {'我': [], '是': []} d["我"].append("呵") print(d) # {'我': ['呵'], '是': ['呵']}
2. 深浅拷贝
1. = 没有创建新对象, 只是把内存地址进行了复制
lst = ["篮球", "足球", "羽毛球", "台球", "网游"] lst2 = lst1 print(id(lst1)) #内存地址 931928675976 print(id(lst2)) #内存地址 931928675976 print(lst1) # ["篮球", "足球", "羽毛球", "台球", "网游"] print(lst2) # ["篮球", "足球", "羽毛球", "台球", "网游"] # 内存地址一样,就是两个列表指向同一个内存地址
2. 浅拷贝 lst.copy() 只拷贝第一层.
lst = ["篮球", "足球", "羽毛球", "台球", "网游"] lst2 = lst1.copy() print(id(lst1)) # 内存地址652172531464 print(id(lst2)) # 内存地址652173290568 print(lst1) # ["篮球", "足球", "羽毛球", "台球", "网游"] print(lst2) # ["篮球", "足球", "羽毛球", "台球", "网游"] # 仅是内容相同,内存地址不同,只是修改表面
3. 深拷贝
import copy
copy.deepcopy() 会把对象内部的所有内容进行拷贝
import copy lst = ["篮球", "足球", "羽毛球", "台球", "网游"] lst2 = copy.deepcopy(lst1) print(id(lst1)) # 内存地址72498038856 print(id(lst2)) # 内存地址72495798024 print(lst1) # ["篮球", "足球", "羽毛球", "台球", "网游"] print(lst2) # ["篮球", "足球", "羽毛球", "台球", "网游"] # 内存地址不同,内容相同,完全复制成另一个列表