所谓数据的可变性,创建之后,能否被改变。对于初学者,很难区分一种数据(类型)是否可变。
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.)
>>>
我们来看几个例子
>>> ac = 1+3j
>>> ac
(1+3j)
>>> id(ac)
47494520
>>> ac += 1
>>> ac
(2+3j)
>>> id(ac)
46163512
>>> ab = True
>>> idab = id(ab)
>>> idab
505509720
>>> ab = False
>>> id(ab)
505509708
>>> 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
>>>
>>> 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中比较特殊的一种数据类型,他不是严格的不可变类型,但划分上通常会把他划分到不可变类型中去
>>> 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来判断