Python中的变量及数据类型

#Python Summary Part 1

Python中的变量:

首先Python中的变量,更像引用或者说标签。看下面的例子。

>>> a = 1
>>> b = 1
>>> id(a)
30843680
>>> id(b)
30843680
>>> a = '122333333'
>>> b = '122333333'
>>> id(a)
46196128
>>> id(b)
46196128
 

其中id()函数是获得变量的内存地址,上例中a和b的内存地址是相同的,也就是说他们是同一个东西。

这是因为Python使用了内存池技术(干货1干货2)。由于Python的这个特点,导致这些变量其实不能称为变量(不可变的变量)。

Python中的基础数据类型有:

数(分为int long float complex),字符串(str),元组(tuple),列表(list),字典(dict)。

其中数,字符串,元组就属于不可变的。

对于这些数据类型而言,如果a的值与b的值一样,那么一般来说a的id和b的id是一样的。

而对于列表和字典来说,如果a的值与b的值一样,a和b的id可能一样也可能不一样,这个就要看a和b是怎么来产生的了。例如:

>>> a = {1:'a',2:'b',3:'c',4:'d',5:'e'}
>>> b = {1:'a',2:'b',3:'c',4:'d',5:'e'}
>>> id(a)
46104624
>>> id(b)
46095360

>>> a = {1:'a',2:'b',3:'c',4:'d',5:'e'}
>>> b =a
>>> id(a)
46104624
>>> id(b)
46104624

如果b是单独产生,而不是用b=a这样子的语句产生,那么b和a的id是不一样的,反之则id相同。

所以,b=a这样子的赋值语句在一定程度上可以认为,a和b都是标签,b标签和a标签是一样的。

总结一下:

对于不可变的数据类型(数、字符串、元组)而言,因为数据不可变,所以一个同样的数据只需要一个固定的空间来储存,所以他们值一样,标签也一样。

对于可变的数据类型(列表、字典),因为数据可变,所以跟数据初值无关,都会开辟新的空间来引用这个数据,他们的未来可能不一样,所以无法使用同一块空间,所以标签不一样。而对于b=a这样子的语句,只是把a标签赋值给了b标签,从而引用了同一块数据,所以他们的id是一样的。
亦或可以这样子说,Python中变量实际是C中的指针。
>>> a = {1:'I',2:'am',3:'Rex'}
>>> b = {1:'I',2:'am',3:'Rex'}
>>> a[3]='Du'
>>> print a
{1: 'I', 2: 'am', 3: 'Du'}
>>> print b
{1: 'I', 2: 'am', 3: 'Rex'}
 
 这个例子中,a和b是指向不同空间的指针。 

>>> a = {1:'I',2:'am',3:'Rex'}
>>> b =a
>>> a[3]='Du'
>>> print a
{1: 'I', 2: 'am', 3: 'Du'}
>>> print b
{1: 'I', 2: 'am', 3: 'Du'}


这个例子中,a和b是指向相同空间的指针。


在Python中,有is 和 == 来判断两个量的关系。
当两个变量id相同,is返回True,其他为False。
当两个变量值(Value)相同,==返回True,其他为False。

综上所述:Python中的赋值有很大的坑存在。。。。为了不踩,所以别把”变量“当作变量,而要称为引用或者指针。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值