Python中可变数据类型和不可变数据类型解析

什么是不可变数据类型?

不可变数据类型就是变量对应的值是不会改变的,如果改变变量对应的值就会重新开辟一个内存空间再将该变量指向新地址。
不可变类型:

  • 数字(int,float)
  • 字符串(str)
  • 元组(tuple)

性质一:

a=1
b=1
c=a+0
print(a is b)
print(a is c)

is是对两个变量的id进行比较,相同返回True,不同则返回False。
上述代码的结果是打印了两个True
在除了tuple的不可变变量中,只要两个变量的数据类型相同并且值也相等,那么这两个变量的地址也相同
元组(tuple)不符合这一性质

a=(1,2,3)
b=(1,2,3)
print(a is b)

结果返回False
这就是tuple相对于其它不可变变量的特殊性
这个性质的优点在于减少了重复的值对内存空间的占用

性质二:
来看下面的代码:

i = 5
j = i
j += 1
print(i)
print(j)

这个过程中发生了什么呢?
不可变变量
由上图我们可以发现不可变变量在“改变”时,原来的对象内容和内存并没有发生变化
再来看一下字符串:

a="abc"
print(a.replace("a","A"))
print(a)

a执行replace 后把里面的“a”换成了“A“相当于创建的新的地址存放”Abc“ ,但是并没有再让a指向这块新的地址所以a并没有变化,通过这一性质我们可以推出:对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

什么是可变数据类型?

变量对应的值可以改变,改变时对象在内存地址中的值原地改变(即还是原来那个内存地址)

可变对象不满足不可变对象的性质一而性质二刚好和不可变对象相反
来看一下可变类型的执行过程和内存分析:

names = ['刘备','关羽','张飞']
usernames = names
names.append('赵云')
print(names)
print(usernames)

在这里插入图片描述
注意:tuple是一个特殊的不可变类型,因为它其中的元素可以是可变类型。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值