鱼C论坛

 找回密码
 立即注册
查看: 2067|回复: 3

[已解决]变量和列表的内存使用

[复制链接]
发表于 2020-10-11 16:48:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如下代码,按我的理解,变量是给分配内存的,列表不单独开辟内存,是这样么?python这么设计的原因是什么呢,是因为列表可能占用内存大,为了节省内存么?

>>> a= 3
>>> b=a
>>> a=a+1
>>> a
4
>>> b
3


>>> a=['1','2','3']
>>> b=a
>>> a.reverse()
>>> a
['3', '2', '1']
>>> b
['3', '2', '1']
>>>
最佳答案
2020-10-11 17:59:35
python 中变量赋值就是贴标签,重新赋值就是重新贴标签。
python中变量分两大类,一类是不可变类型变量,例如:数字,字符串等,一类是可变类型对象,例如:列表、元组、字典等

这两种类型的变量有很大的区别,之所以有很大的区别,是因为不可变类型对象没有修改变量的操作,你所看到的修改变量实际上就是重新赋值;可变类型的变量有修改变量的操作,例如列表有append、pop、remove等操作
可以看看我写的这个帖子:python细节之2、变量名与标签 变量的赋值与修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-11 17:59:35 | 显示全部楼层    本楼为最佳答案   
python 中变量赋值就是贴标签,重新赋值就是重新贴标签。
python中变量分两大类,一类是不可变类型变量,例如:数字,字符串等,一类是可变类型对象,例如:列表、元组、字典等

这两种类型的变量有很大的区别,之所以有很大的区别,是因为不可变类型对象没有修改变量的操作,你所看到的修改变量实际上就是重新赋值;可变类型的变量有修改变量的操作,例如列表有append、pop、remove等操作
可以看看我写的这个帖子:python细节之2、变量名与标签 变量的赋值与修改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-11 18:00:57 | 显示全部楼层
变量也只是locals()这个字典的键罢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-11 22:57:43 | 显示全部楼层
简单的理解就是;
变量的值存放在堆内存    然后把这个内存地址存入栈内存和变量名进行一个绑定
如果我们修改了一个变量的值 那么实际上就是重新开辟一个堆内存,创建一个值,然后把值的内存地址存入栈区重新和变量名绑定一下

列表的话不太一样.因为列表内存存放的实际上是每个元素的内存地址.而不是元素本身

不知道我的理解差了多少........


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表