Python变量赋值
在Python中,当给变量赋值时,系统会为这个值分配内存空间,然后让这个变量指向这个值;当改变变量的值时,系统会为这个新值分配另一个内存空间,然后还是让这个变量指向这个新值。
Python的变量赋值,变量改变的是地址,不变的是内存空间中的值。变量赋值实际上是修改了值的引用,指向了新值的地址。
当给变量赋新值后,没有任何变量指向旧值的内存空间,这个旧值的空间数据为垃圾数据,系统会自动将其删除,回收它占用的内存空间。
Python的id()函数可以用来查看变量的内存地址。
如:a的值改为2之后,内存地址也改变了。原值1的内存空间没有变量指向它,将被系统回收。
# a和1的地址相同,表明a指向1 >>> a=1 >>> id(1) 1536673456 >>> id(a) 1536673456 # a改为2,地址也发生变化 >>> a=2 >>> id(2) 1536673488 >>> id(a) 1536673488 >>> id(1) 1536673456
由此,Python中的值互换,就可以不需要中间变量的参与,直接互换变量即可:a,b=b,a
>>> a=1 >>> b=2 >>> id(a) 1536673456 >>> id(b) 1536673488 >>> a,b=b,a >>> a 2 >>> b 1 >>> id(a) 1536673488 >>> id(b) 1536673456 >>> id(1) 1536673456 >>> id(2) 1536673488
另外,为了提高内存空间的利用效率,Python对于一些数值比较小的int整型变量使用了相同的内存空间。如果数值越大,则使用的地址会不一样。
# 1的内存地址都一样 >>> id(1) 1536673456 >>> id(1) 1536673456 >>> id(1) 1536673456 >>> id(1) 1536673456 >>> id(1) 1536673456 # 1.0的内存地址偶尔不一样 >>> id(1.0) 3150552963784 >>> id(1.0) 3150552962128 >>> id(1.0) 3150552963784 >>> id(1.0) 3150552962128 >>> id(1.0) 3150552963808 # 1111的内存地址多数都不一样 >>> id(1111) 3150591410672 >>> id(1111) 3150591411984 >>> id(1111) 3150591412496 >>> id(1111) 3150591410672 >>> id(1111) 3150591411984 # 11111111111111的内存地址都不一样 >>> id(11111111111111) 3150591412368 >>> id(11111111111111) 3150591412304 >>> id(11111111111111) 3150591412336 >>> id(11111111111111) 3150591411984 >>> id(11111111111111) 3150591412496
本文参考:
https://blog.csdn.net/Invokar/article/details/89138684
https://blog.csdn.net/oppo62258801/article/details/94147509
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构