Python的可变和不可变类型

Posted 思江

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python的可变和不可变类型相关的知识,希望对你有一定的参考价值。

一、可变类型(不可哈希类型就是可变类型-->unhashable)

  值改变,id不变,证明改的是原值,证明原值是可以改变的。

   总结:list[],dict{},都为可变类型,整体的地址不变,变的是里面的值,针对字典多说点:key必须是不可变类型,value可以是任意类型。

# list是可变类型
l=[aaa,bbb,ccc]
print(id(l))  # -->31194624
l[0]= 2
print(l)  # [2, ‘bbb‘, ‘ccc‘]
print(id(l))  # -->31194624
l[1] = True
print(l)  # [2, True, ‘ccc‘]
print(id(l))  # -->31194624
l[2] = [4,5,6,]
print(l)  # [2, True, [4, 5, 6]]
print(id(l))  # -->31194624

 

dict 可变类型
dic={k1:111,k2:222}
print(id(dic))  # --> 31210112
dic[k1]=3333333333
print(dic)  # {‘k1‘: 3333333333, ‘k2‘: 222}
print(id(dic))  # --> 31210112

 

# 关于字典补充:
# 定义:{}内用逗号分隔开多key:value,
#           其中value可以是任意类型
#           但是key必须是不可变类型
dic={
    k1:111,
    k2:3.1,
    k3:[333,],
    k4:{name:egon}
}
print(id(dic))
#
dic={
    2222:111,
    3.3:3.1,
    k3:[333,],
    k4:{name:egon}
}
print(id(dic))
# print(dic[3.3])

# dic={[1,2,3]:33333333}  # --> TypeError: unhashable type: ‘list‘
# dic={{‘a‘:1}:33333333}  # --> TypeError: unhashable type: ‘dict‘
# 总结:不可哈希类型就是可变类型

 

二、不可变类型

  值改变,id也改变,证明是产生新的值,压根没有改变原值,证明原值是不可以被修改的。

# int是不可变类型
x=10
print(id(x))       -->8791237908416
x=11 # 产生新值
print(id(x))       -->8791237908448
float是不可变类型
x=3.1
print(id(x))  # -->30373680
x=3.2
print(id(x))  # -->34764944
str是不可变类型
x="abc"
print(id(x))  #  -->31187056
x=gggg
print(id(x))  #  -->4718128
bool不可变
a = True
print(id(a))  # -->8791233238864
b = True
print(id(b))  # -->8791233238864
c = False
print(id(c))  # -->8791233238896
d = False
print(id(d))  # -->8791233238896
print(id(True))  # -->8791233238864
print(id(False)) # -->8791233238896

 

  总结:int类型,float类型,str类型,bool类型都是不可变类型,都被设计成了不可分割的整体,不能够被改变。

  为什么说不可分割?例如:10 为不可分割,为什么10 + 1 =11,11是一个新的不可分割的值。

 

以上是关于Python的可变和不可变类型的主要内容,如果未能解决你的问题,请参考以下文章

Python的可变和不可变类型

python可变类型和不可变类型

python可变类型和不可变类型

python 可变类型和不可变类型

python 可变类型和不可变类型

Python之可变和不可变的数据类型