python 可变和不可变数据类型

本文介绍了Python是完全面向对象的非静态类型语言,变量无类型,类型指内存中对象类型。阐述了可变数据类型(列表、字典)和不可变数据类型(整型、字符串、元组)的特点,还提及小整数对象池概念,避免整数频繁申请和销毁内存。

python 是一个完全面向对象的语言,它不是静态类型的。你不需要在使用前声明变量,也不需要声明变量的类型。所有的变量都是对象。“一切皆为对象,一切皆为对象的引用”,可以这样讲变量就是变量(引用),它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

可变数据类型:列表list和字典dict;不可变数据类型:整型int、字符串型string和元组tuple。

不可变数据类型:

>>> x=1
>>> id(x)
1410614928
>>> y=x
>>> id(y)
1410614928
>>> x+=2
>>> id(x)
1410614960
>>> 

id()查看的是当前变量的地址值,从上面可以看出,x,y的地址是相同的。也就是说它们指向了同一个对象地址,也就是1. 但是后面我们执行了x+=2,这样x就被新建了一个对象3。 原有的对象1,目前还有y在使用。 如果我们再给y重新赋值。则原有的内存1410614928 将没有引用指向它了。它就要被“垃圾回收”。

可变数据类型:

>>> aa = ['i','love','you']
>>> id(aa)
33373640
>>> a = ['i','love','you']
>>> id(a)
52336360
>>> a.append('too')
>>> id(a)
52336360

这里两个['i','love','you']在内存的地址是不同的。后面是新建的一个对象,它和上面提到的不可变类型是不同的。但是当我们对啊a做添加操作时,可以发现它指向的内存地址不变。引用的地址不变,但是它会扩充地址,改变对象的值。

 

不可变数据类型,不允许变量的值发生变化。当变的时候,相当于新建对象。

可变数据类型,允许变量的值发生变化,当执行append,+=操作时,不会新建对象,只是地址扩充,改变对象值。引用时不变的。

备注点:

>>> id(888)
49870944
>>> id(888)
49869664

>>> id(2)
1410614944
>>> id(2)
1410614944

这里涉及到python中的小整数对象池的概念。避免为整数频繁申请和销毁内存空间。Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值