列表的内存自动管理功能,在删除列表中的元素时,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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界