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,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件