温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python元组的可变与不可变问题怎么解决

发布时间:2022-12-28 09:44:36 来源:亿速云 阅读:103 作者:iii 栏目:开发技术

本文小编为大家详细介绍“python元组的可变与不可变问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“python元组的可变与不可变问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    python元组的可变与不可变

    学过python的人都知道有一种数据类型叫做元组,而元组与列表最重要的区别就在于元组一经定义就不能改变其内容,但元组中的内容真的是完全不可变的吗,看了下面这段代码想必你也会产生这样的疑问.

    代码如下:

    tuple = (1, 2, 3, [1, 4, 7])
    print(tuple)
    tuple[3][2] = 100
    print(tuple)

    在编译器上运行上述代码,结果如下:

    python元组的可变与不可变问题怎么解决

    从结果来看,元组中数据已经产生了变化,那元组还是不可变的吗,我们下面就从内存来解释元组的可变与不可变.

    python元组的可变与不可变问题怎么解决

    上面的图就是内存图,元组和列表都是引用数据类型,其内存空间存放的元素存放位置的地址值,所谓元组的不可变指的是元组所指向的内存中的内同不可变,在上图中体现的是1,2,3和0x200这四个值不可变,而对于0x200这个地址所指向的列表来说,其内容是可以改变的.

    为什么元组Tuple是不可变的,列表List是可变的

    1.所谓元组的不可变指的是元组所指向的内存中的内容不可变

    # 关于元组是不可变的
    tupleA = (1, 2, 3, 4)
    # tupleA[0] = 0  # 报错 TypeError: 'tuple' object does not support item assignment 不支持修改元素
    # 查看内存地址 id()
    print(id(tupleA))
    tupleA = (1, 2, 3, 4)
    print(id(tupleA))
    tupleA = (0, 1, 2, 3)
    print(id(tupleA))

    输出结果是: 

    1960670738208
    1960670738208
    1960670737888

    从以上实例可以看出,重新赋值的元组 tupleA,绑定到新的对象了,不是修改了原来的对象。

    2.List 是可变的

    #关于List是可变的
    listA = [1, 2, 3]
    print(id(listA))
    listA[0] = 0
    print(listA)
    print(id(listA))
    listA = [1, 2, 3]
    print(id(listA))
    listA = [1, 2, 4]
    print(id(listA))

    输出结果是

    2974141229248
    [0, 2, 3]
    2974141229248
    2974141227968
    2974141229248

    从以上实例可以看出,重新赋值的列表listA,并未绑定到新的对象,而是修改了原来的对象。

    • 字典中的 key 必须是不可变的类型

    • int str tuple  是值类型 (是不可变的)

    • List set dict  是引用类型(是可变的) 

    读到这里,这篇“python元组的可变与不可变问题怎么解决”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI