一、列表元素中的删除
li = [1,2,3,4]
for i in li:
li.remove(i)
print(li) # 打印[2, 4]
# 使用del
li = [11, 22, 33, 44]
for i in range(0, len(li)):
del li[i]
print(li) # 报错
#
# pop
for el in li:
li.pop() # pop也不⾏
print(li) # [11, 22]
# remove
for e in li:
li.remove(e)
print(li) # 结果为[22, 44]
二、字典(dict)元素删除
dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'}
# 删除key中带有'k'的元素
for k in dic:
if 'k' in k:
del dic[k] #报错 dictionary changed size during iteration, 在循环迭代的时候不允许进⾏删除操作
print(dic)
那怎么办呢? 把要删除的元素暂时先保存在⼀个list中, 然后循环list, 再删除
dic = {'k1': 'bab', 'k2': 'w', 's1': '⽼板'}
dic_list = []
# 删除key中带有'k'的元素
for k in dic:
if 'k' in k:
dic_list.append(k)
for el in dic_list:
del dic[el]
print(dic)
tips:
# 直接赋值,内存地址指向相同
lst1 = ["⾦⽑狮王", "紫衫⻰王", "⽩眉鹰王", "⻘翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("杨逍")
print(lst1)
print(lst2)
print(id(lst1),id(lst2))
# 结果
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王']
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']
# ['⾦⽑狮王', '紫衫⻰王', '⽩眉鹰王', '⻘翼蝠王', '杨逍']
# 29347784 29347784
三、浅拷贝
lst1 = ["何炅", "杜海涛","周渝⺠"]
lst2 = lst1.copy()
lst1.append("李嘉诚")
print(lst1)
print(lst2)
print(id(lst1), id(lst2))
# 两个lst完全不⼀样. 内存地址和内容也不⼀样. 发现实现了内存的拷⻉
四、深拷贝
import copy
lst1 = ["何炅", "杜海涛","周渝⺠", ["麻花藤", "⻢芸", "周笔畅"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("⽆敌是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))