python--深浅拷贝 join() 列表和字典的删除 fromkeys建立字典
北京的冬天雾霾依旧很重,依稀记得人生初见雾霾时的样子,那时的回忆也是有些尴尬,不过雾霾也伴随了我的成长,成为了我肺泡中不可分割的一部分.
今天我想写的是拷贝的问题,不过在这之前我想先补充一点关于字符串的东西
1.字符串的拼接
lst = ["1", "2", "3", "4"] 使用前面的字符串. 对后面的列表进行拼接,拼接的结果是一个字符串 s = "_".join(lst) print(s) 最后的结果是 1_2_3_4 这个join()就是用迭代的方法对数据进行拼接 for i in lst: print(i,end = " ") 这样输出的结果就成了 1 2 3 4 就不用换行了 因为end 默认为\n
2.列表,字典的删除
删除列表的方法(简单方法):
li = ["a", "b", "c", "d"] for i in li[:]: li.remove(i) print(li) # 列表切片会产生一个新对象,这样就可以删除列表了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
例: dic = {"张无忌":"乾坤大挪移", "周芷若":"哭", "赵敏":"卖萌"} for k in dic: dic.pop(k) # dictionary changed size during iteration dic["灭绝师太"] = "倚天屠龙剑" # dictionary changed size during iteration 这样的方法是绝对删除不干净的 ,绝对不要用这种方式删除
要想删除列表, 字典这样的类型.应该把要删除的元素放在另一个列表当中,通过迭代新列表,来删除旧列表中的内容
把要删除的key保存在一个新列表中 # 循环这个类表.删除字典中的key:value lst = [] for k in dic: lst.append(k) # 循环列表 # 删除字典中的内容 for el in lst: dic.pop(el) print(dic)
3.深浅拷贝
- 浅拷贝只拷贝第一层的内容,第二层的内容不会拷贝
- 深度拷贝会拷贝所有内容 ,把元素的全部内容进行拷贝不会产生一个改变,另外一个也跟着改变的问题
深拷贝: copy.deepcopy()
# 引入一个模块 import copy lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] lst2 = copy.deepcopy(lst1) # 深拷贝: 对象内部的所有内容都要复制一份. 深度克隆(clone). 原型模式 print(id(lst1)) print(id(lst2)) print(lst1) print(lst2) lst1[4].append("葫芦娃") print(lst1) print(lst2)
浅拷贝: .copy()
从上到下只有一个列表被创建 lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] lst2 = lst1 # 并没有产生新对象. 只是一个指向(内存地址)的赋值 print(id(lst1)) print(id(lst2)) lst1.append("葫芦娃") print(lst1) print(lst2) lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅"] lst2 = lst1.copy() # 拷贝, 抄作业, 可以帮我们创建新的对象,和原来长的一模一样, 浅拷贝 print(id(lst1)) print(id(lst2)) lst1.append("葫芦娃") print(lst1) print(lst2) lst1 = ["胡辣汤", "灌汤包", "油泼面", "麻辣香锅", ["长白山", "白洋淀", "黄鹤楼"]] lst2 = lst1.copy() # 浅拷贝. 只拷贝第一层内容 print(id(lst1)) print(id(lst2)) print(lst1) print(lst2) lst1[4].append("葫芦娃") print(lst1) print(lst2) 现在我们发现 直接lst1 = lst2时 他们实际上指的是同一个对象, 就是说都指向这个列表的地址, 所以当一个改变的时候 另一个也会改变
4. .fromkeys()用来创建一个字典
坑1: 返回新字典. 和原来的字典没有关系 dic = {} d = dic.fromkeys("风扇哥", "很困") print(dic) # {} print(d) 坑2: 如果value是可变的数据类型,那么其中一个key对应的value执行的更改操作. 其他的也跟着变 d = dict.fromkeys("胡辣汤", []) print(d) # {'胡': [], '辣': [], '汤': []} print(id(d['胡'])) print(id(d['辣'])) print(id(d['汤'])) d['胡'].append("河南特色") print(d) # {'胡': ['河南特色'], '辣': ['河南特色'], '汤': ['河南特色']}
dic = {}
d = dic.fromkeys(["胡辣汤"])
print(d) # {'胡辣汤': None}