列表的内存自动管理功能,在删除列表中的元素时,python会自动对列表内存进行收缩,并移动列表中的元素以保证元素之间没有间隙,所以使用
“循环+remove()方法”来删除列表中元素时会出现元素错位
#删除list1中的奇数 ist1=[1,1,1,2,3,4,5] for i in list1: if i%2!=0: list1.remove(i) print(list1) #[1,2,4]
若要正确循环删list中的元素,定义两个相同的list。一个list用于循环,从另一个list中删除
import copy list1=[1,1,1,2,3,4,5] list2=[1,1,1,2,3,4,5] for i in list2: if i%2!=0: list1.remove(i) print(list1) #[2,4]
浅拷贝
#list2=list1 相当于 list2=list1.copy(),都是浅拷贝 #list2和list1指向同一个内存地址,所以list1变了,list2也会变 ;同样不能达到正确删除list1中奇数的目的 list1=[1,1,1,2,3,4,5] list2=list1 #浅拷贝 相当于 list1.copy() print(id(list1)) # 2270067237960 id()取内存地址 print(id(list2)) # 2270067237960 for i in list2: if i%2!=0: list1.remove(i) print(list1) #[1,2,4]
深拷贝
# list2=copy.deepcopy(list1) 深拷贝,list1和list2指向不同的内存地址 import copy #导入copy模块 list1=[1,1,1,2,3,4,5] list2=copy.deepcopy(list1) #深拷贝 print(id(list1)) #2085723515720 id()取内存地址 print(id(list2)) #2085723513928 for i in list2: if i%2!=0: list1.remove(i) print(list1) #[2,4]
字符串的值是不能改变的,所以字符串和list情况不同
1 a='cat' #a中保存的是cat的内存地址 2 b = a #将a中保存的内存地址赋给b,a和b指向同一块内存地址 3 a='dog' #字符串的值是不能改变的,所以重新对a赋值会在分配一块内存给dog,a指向dog的内存地址 4 print(a) #dog 5 print(b) #ca