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

posted @   YJXZ  阅读(1936)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件
点击右上角即可分享
微信分享提示