python元组的可变与不可变问题

 更新时间:2022年12月23日 10:58:25   作者:马马也  
这篇文章主要介绍了python元组的可变与不可变问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

python元组的可变与不可变

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

代码如下:

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

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

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

上面的图就是内存图,元组和列表都是引用数据类型,其内存空间存放的元素存放位置的地址值,所谓元组的不可变指的是元组所指向的内存中的内同不可变,在上图中体现的是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  是引用类型(是可变的) 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 3行Python代码实现图像照片抠图和换底色的方法

    3行Python代码实现图像照片抠图和换底色的方法

    这篇文章主要介绍了3行Python代码实现图像照片抠图和换底色的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python使用celery实现订单超时取消

    python使用celery实现订单超时取消

    这篇文章主要为大家详细介绍了python使用celery实现订单超时取消,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • python模拟登录百度代码分享(获取百度贴吧等级)

    python模拟登录百度代码分享(获取百度贴吧等级)

    python模拟登录百度,实现了登录并读取百度关注贴吧列表,百度登录还是有点麻烦的,由于用的ssl,所以要先获取token,然后再登录,这个用finddle2分析下,还是比较好解决的
    2013-12-12
  • Python实现异常值自动检测的案例分享

    Python实现异常值自动检测的案例分享

    在数据分析和机器学习中,异常值的检测是一个关键步骤,它有助于识别数据中的异常模式和离群点,本文将介绍Python中异常值检测的实战案例,使用一些常见的技术和库,为大家提供全面的示例代码和详细解释
    2024-01-01
  • Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析

    Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析

    这篇文章主要给大家介绍了关于Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-05-05
  • 解决python文件字符串转列表时遇到空行的问题

    解决python文件字符串转列表时遇到空行的问题

    下面小编就为大家带来一篇解决python文件字符串转列表时遇到空行的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • 树莓派采用socket方式文件传输(python)

    树莓派采用socket方式文件传输(python)

    这篇文章主要为大家详细介绍了树莓派采用socket方式文件传输,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python曲线平滑的实现示例

    Python曲线平滑的实现示例

    本文主要介绍了Python曲线平滑的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • python的slice notation的特殊用法详解

    python的slice notation的特殊用法详解

    今天小编就为大家分享一篇python的slice notation的特殊用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python文件的操作处理详解

    Python文件的操作处理详解

    今天这篇文章给大家介绍Python文件的操作处理,文章内容介绍的很详细,有需要的可以参考借鉴,希望能够给你带来帮助
    2021-10-10

最新评论