VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 50|回复: 11

python中不可变的变量

[复制链接]

2

主题

10

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2020-3-23 16:30:01 | 显示全部楼层 |阅读模式
为什么存在不可变的变量类型呢??这样不是很麻烦?

如:
num=1
num=num+2

就上面的简单句子就产生了两次int对象,这不是使用python速度变慢??

难道修改一个变量的值比生成一个变量还要慢??

生成一个变量不是要做的工具更多。不理解
回复

使用道具 举报

0

主题

1

帖子

1

积分

新手上路

Rank: 1

积分
1
发表于 2020-5-23 13:03:24 | 显示全部楼层
A variable is a bunch of addresses in the RAM, changing the value is changing the value of whatever is stored in the bunch of addresses. Generating a variable is saving RAM storage for that variable, then your code can put information in those storage spaces in RAM.
回复

使用道具 举报

0

主题

35

帖子

21

积分

新手上路

Rank: 1

积分
21
发表于 2020-7-3 09:15:01 | 显示全部楼层
在C++中,有这种情况
int a = 1;
a = a++ + ++a;
变量不可变或可以避免产生歧义
回复

使用道具 举报

2

主题

10

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-7-4 22:30:01 | 显示全部楼层
还有没有别的好处?就是为了这个牺牲也太大了。:)
回复

使用道具 举报

0

主题

14

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2020-7-14 21:00:01 | 显示全部楼层
>>就上面的简单句子就产生了两次int对象,这不是使用python速度变慢??
慢不慢不是看出来的,试过就知道了。

>>难道修改一个变量的值比生成一个变量还要慢??

不可变对象有很多好处,最明显的是对象共享:

str1 = "abc"
str2 = "abc"
str3 = "abc"

因为"abc"是不可变的,现在只需要一个"abc"对象。

如果"abc"是可变的,修改str1的时候,为了不受影响,str2和str3必须拥有与str1独立的"abc"副本,那样需要三个对象。

而且有些应用需要不可变的数据,比如字典的键值。如果学过hash的话应该就可以明白。
回复

使用道具 举报

2

主题

10

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-7-15 12:00:02 | 显示全部楼层
从C/C++中过来的人,我想要学好python就重要是两步:

不可变变量。

没有字符变量。

不怎么对不对??
回复

使用道具 举报

0

主题

14

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2020-7-16 09:00:01 | 显示全部楼层
>>不可变变量。
我觉得不难理解,C++中也经常需要编写immutable class。

>>没有字符变量。
确实有点不爽。
回复

使用道具 举报

2

主题

10

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-7-16 17:15:01 | 显示全部楼层
我一直是用C的,没有用过C++(虽然学过,只是学过,没有用过。)


在C中没有不可变变量这种东西。对我来说有点别扭。
回复

使用道具 举报

0

主题

14

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2020-7-16 23:00:01 | 显示全部楼层
近似于const吧。
回复

使用道具 举报

2

主题

10

帖子

6

积分

新手上路

Rank: 1

积分
6
 楼主| 发表于 2020-7-18 00:15:02 | 显示全部楼层
我现在就是用const这种方法理解它。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2020|verysource.com ( 京ICP备17048824号-1 )

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