基础数据补充

列表不能循环添加 会变成死循环
列表使用for循环删除元素 for循环机制会导致有些操作删不干净:

li = [1,2,3,4,5]
for i in li:
    li.remove(i)
print(li)

结果:
[2,4]
#remove在删除的时候,后边的数字会补位到前一位,导致删除不干净
li = [1,2,3,4,5]
for i in li:
    li.pop()
print(li) 

结果:
[1, 2]

#循环到3的时候,后边的元素已经删除了,没有办法继续循环

列举几种可以实现清空列表的方法:

li = [1,2,3,4,5]
for i in range(len(li)): 
    li.pop()
print(li)

结果:
[]
li = [1,2,3,4,5]  
l2 = []
for i in li:
    l2.append(i)
for j in l2:
    li.remove(j)
print(li)

结果:
[]

#定义一个空列表,利用偷换概念的方法进行清空
li = [1,2,3,4,5]
for i in li:
    li.clear()           
print(li)

结果:
[]
#clear可以很容易的清空列表

字典删除元素 字典在for循环的时候 不能修改:

dic = {'1':22,'5':'22'}
lst = []
for i in dic:
    lst.append(i)   
for j in lst:
    dic.pop(j)
print(dic)

结果:
{}

#同样适用偷换概念的方法

fromkeys:

结构是dict.fromkeys('可迭代对象','值')

第一个位置是可迭代对象,也就是字典的键
第二个位置 不写是None 也就是字典的值
dic = dict.fromkeys('1234','你好')
print(dic)

dic['2'] = '明天'   
print(dic)

dic['3'] = [5,6,7]
print(dic)

结果:
{'1': '你好', '2': '你好', '3': '你好', '4': '你好'}
{'1': '你好', '2': '明天', '3': '你好', '4': '你好'}
{'1': '你好', '2': '明天', '3': [5, 6, 7], '4': '你好'}

当fromkeys当中添加的值是可变数据类型,当改变这个可变数据类型时,所有键对应的值都要改变:

dic = dict.fromkeys('你好啊',[1,2,3])
print(dic)
dic[''].append(99)
print(dic)

结果:
{'': [1, 2, 3], '': [1, 2, 3], '': [1, 2, 3]}
{'': [1, 2, 3, 99], '': [1, 2, 3, 99], '': [1, 2, 3, 99]}

深浅拷贝:

浅拷贝: 只拷贝第一层元素,元素是不可变的就不会变,元素是可变的,两个都会变

li = [1,2,3,4]
lst = li.copy()
print(li)
print(lst)

li[0] = 6
print(li)   
print(lst)

结果:
[1, 2, 3, 4]
[1, 2, 3, 4]

[6, 2, 3, 4]
[1, 2, 3, 4]

#当li的元素改变是,lst不变
li = [1,2,3,4,[5,6,7]]   
lst = li.copy()
print(li)
print(lst)

li[-1].append(90)
print(li)   
print(lst)  

结果:
[1, 2, 3, 4, [5, 6, 7]]
[1, 2, 3, 4, [5, 6, 7]]

[1, 2, 3, 4, [5, 6, 7, 90]]
[1, 2, 3, 4, [5, 6, 7, 90]]
#列表中包含可变数据列表,当li改变时,lst也会变

深拷贝: 不可变数据类型公用,可变数据类型重新开辟空间    import copy模块:

import copy
li = [1,2,3,4,[5,6,7]]
lst = copy.deepcopy(li) 
print(li)
print(lst)

li[-1].append(90)
print(li)   
print(lst)

结果:
[1, 2, 3, 4, [5, 6, 7]]
[1, 2, 3, 4, [5, 6, 7]]

[1, 2, 3, 4, [5, 6, 7, 90]]
[1, 2, 3, 4, [5, 6, 7]]
原文地址:https://www.cnblogs.com/sandy-123/p/10221696.html