美文网首页
python可变数据类型vs不可变数据类型

python可变数据类型vs不可变数据类型

作者: 全村希望gone | 来源:发表于2020-07-09 13:27 被阅读0次

    前言

    今天和师弟一起讨论问题,学到了很多,遂记录一下,也明白了一个人绝对不可能学完所有的知识,多和别人沟通是非常有效的学习方式!

    问题起源:数组赋值

    a=[1,2,3]
    b=a
    b[0]=5
    print(a)
    

    猜猜看 a 输出是多少?

    a=[5,2,3]
    

    再来看一个

    a=1
    b=a
    b=5
    print(a)
    

    猜猜看 a 输出是多少?

    a=1
    

    为什么会出现这样的情况呢?同样是修改b,为什么列表的a变了,而int的a不变呢?
    首先我们要明白在python中存在可变和不可变数据类型,可变数据类型有列表和字典,不可变数据类型有整型、字符、字符串、元组。可变和不可变的意思是什么,区别是什么呢?

    a=[1,2,3]
    b=[1,2,3]
    c=1
    d=1
    print(id(a)==id(b))
    print(id(c)==id(d))
    

    运行这段代码会发现,第一个输出False,第二个输出True,这就可以看出区别了,对于整型变量而言,只要它们的值相同,那么无论有多少个变量指向这个值,这些变量的id都相同,但是对于列表而言,值相同,变量的id不一定相同。但是用“=”赋值,“=”两边的变量的地址是一样的,指向的内容也是一样的,所以你无论如何改变列表中的元素值,最终这两个变量的地址都指向同一个列表,这就解释了上面改变一个列表的元素,另一个列表为什么也变了。而对于整型数据,只要内容不一样,那么变量的地址一定不一样,所以你让b=5之后,b有新的地址,已经不指向1了,而a仍然指向1,所以改变b无法影响a。也就是说最关键的在于可变和不可变的理解,不可变数据类型指的是相同的值无论有多少个变量指向它,变量的id都是相同的(但是元组并不是这样,我也不知道为什么),而可变数据类型则是不同的变量指向相同的值,它们的id也不相同。

    参考资料

    [1] Python的可变与不可变数据类型

    相关文章

      网友评论

          本文标题:python可变数据类型vs不可变数据类型

          本文链接:https://www.haomeiwen.com/subject/kvyjcktx.html