python数据的可变性

所谓数据的可变性,创建之后,能否被改变。对于初学者,很难区分一种数据(类型)是否可变。

不可变的数据类型

python的不可变数据类型包括:int,float,complex,bool,str。python中数据是否可变的判断标准,内建的id函数
    >>> help(id)
Help on built-in function id in module __builtin__:

id(...)
    id(object) -> integer

    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory address.)

>>> 

我们来看几个例子

  1. complex,复数
    >>> ac = 1+3j
    >>> ac
    (1+3j)
    >>> id(ac)
    47494520
    >>> ac += 1
    >>> ac
    (2+3j)
    >>> id(ac)
    46163512
  2. bool
    >>> ab = True
    >>> idab = id(ab)
    >>> idab
    505509720
    >>> ab = False
    >>> id(ab)
    505509708
  3. str,字符串,这个不大容易理解。我当初也觉得很不可思议,字符串怎么还能是不可变的了呢,下面我们来看看
    >>> my_str += ',hao old are you?'
    >>> id(my_str)
    48214384
    >>> my_str
    'I am 26 years old,hao old are you?'
    >>> my_str.replace('26','27')
    'I am 27 years old,hao old are you?'
    >>> id(my_str)
    48214384
    >>> my_str
    'I am 26 years old,hao old are you?'
    >>>

可变的数据类型

python中可变的数据类型有:list、dict,下面我们来看看例子。

1. 可以在列表中追加(append)、移除(remove)、插入(insert)、扩展(extend)、排序(sort)等,而不改变列表的id

>>> al = [1,2,3]
>>> id(al)
47518584
>>> al.append(4)
>>> al
[1, 2, 3, 4]
>>> id(al)
47518584
>>> al.remove(2)
>>> al
[1, 3, 4]
>>> id(al)
47518584
>>> al.insert(1,2)
>>> al
[1, 2, 3, 4]
>>> id(al)
47518584
>>> al.extend([5,6])
>>> al
[1, 2, 3, 4, 5, 6]
>>> id(al)
47518584
>>> al.sort(reverse=True)
>>> al
[6, 5, 4, 3, 2, 1]
>>> id(al)
47518584
>>> 
  1. 可以改变字典中已有键对应的值(d[key] = new_value)、弹出指定键(pop(key,default))、弹出键-值对(popitem)、更新(update(other_dict))等而不改变字典的id
>>> ad = {'name': 'an', 'age': 26}
>>> id(ad)
47542112
>>> ad['age'] = 27
>>> ad
{'age': 27, 'name': 'an'}
>>> id(ad)
47542112
>>> ad.pop('age')
27
>>> ad
{'name': 'an'}
>>> id(ad)
47542112
>>> ad['age'] = 27
>>> ad
{'age': 27, 'name': 'an'}
>>> id(ad)
47542112
>>> ad.popitem()
('age', 27)
>>> ad
{'name': 'an'}
>>> id(ad)
47542112
>>> ad.update({'age': 27, 'sex': 'man'})
>>> ad
{'age': 27, 'name': 'an', 'sex': 'man'}
>>> id(ad)
47542112
>>> 

“不严格”不可变数据

元组是python中比较特殊的一种数据类型,他不是严格的不可变类型,但划分上通常会把他划分到不可变类型中去
  1. 不可变性,元组没有修改其中属性的方法,自然不能改变其中的值;+=、*=等对元组的运算将改变元组的id
  2. 我们把重点放在元组的可变性上,当元组中的元素为可变数据类型时,元组实质上是可以被改变的(但id没变)
>>> at = (1,2,[3,4],{'name': 'an', 'age': 27})
>>> at
(1, 2, [3, 4], {'age': 27, 'name': 'an'})
>>> id(at)
47918416
>>> at[2].append(5)
>>> at
(1, 2, [3, 4, 5], {'age': 27, 'name': 'an'})
>>> id(at)
47918416
>>> at[3]['age'] = 28
>>> at
(1, 2, [3, 4, 5], {'age': 28, 'name': 'an'})
>>> id(at)
47918416
>>> 

一种数据类型是否可变,可以通过内建函数id(object) -> integer来判断

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值