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

目录
  • python元组的可变与不可变
  • 为什么元组Tuple是不可变的,列表List是可变的
    • 1.所谓元组的不可变指的是元组所指向的内存中的内容不可变
    • 2.List 是可变的
  • 总结

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  是引用类型(是可变的)

总结

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

(0)

相关推荐

  • python常用数据结构元组详解

    目录 Tuple 元组 元组的定义和使用 元组常用方法 index(item) count(item):返回某个元素出现的次数 元组解包 元组与列表 Tuple 元组 元组的定义和使用 元组的定义: 元组是有序的不可变对象集合 元组使用小括号包围,各个对象之间使用逗号分隔 元组是异构的,可以包含多种数据类型 元组使用:创建 创建: --使用逗号分隔 --通过小括号填充元素 --通过构造方法tuple(iterable)-----iterable:可迭代对象 --注意:单元素元组,逗号不可或缺 #

  • python列表[list]和元组(tuple)详情

    列表和元组: list是一种有序的集合,可以随时添加和删除其中的元素.1,创建一个普通列表 List = ['Jack','Bob','Lucy','Rose'] Append() 末尾追加元素 conunt()列表中某个元素的数量 extend()可以在列表尾部追加包含多个值的另一个序列,而list的append()只能添加一个值. 可以说list的extend方法是有扩展列表的作用: list1 = [1,2,3] list2 = [7,8,9] list1.extend(list2) pr

  • Python列表推导式,元组推导式,字典推导式,集合推导式

    目录 1 介绍 2 列表推导式 3 元组推导式 4 字典推导式 5 集合推导式 1 介绍 推导式(解析器):是Python独有的一种特性.使用推导式可以快速生成列表.元组.字典以及集合类型的数据,因此推导式又可分为列表推导式. 2 列表推导式 格式: 格式1: [表达式 for 变量 in 列表][out_exp_res for out_exp in input_list] 格式2:[表达式 for 变量 in 列表 if 条件][out_exp_res for out_exp in input

  • python中的列表和元组实例详解

    python中的列表和元组 # 1.列表的格式 # [数据1,数据2,数据3,···] # 列表 可变数据类型 # 列表可以存储多个数据,数据之间的逗号以英文逗号分隔 # 列表可以存储不同类型数据,但一般存储同一数据类型,这样便于操作 # list_name = [] # 定义了一个空的列表 # 定义了一个有数据的列表 # 可以去索引和切片 print('1.列表的格式') list_name = ['小明', '小刚', '小芳'] print(list_name[0]) # 小明 print

  • Python元组定义及集合的使用

    目录 一. 元组 1.1 元组的创建 1.2 元组的遍历 二. 集合 2.1 集合的创建 2.2 集合的新增 2.4 集合的关系 1. 两集合是否相等 2. 子集 3. 交集 一. 元组 元组是Python中的一个内置的数据结构,它是一个不可变的序列,所谓的不可变序列就是不可以进行增删改的操作. 1.1 元组的创建 元组的创建可以使用两种方式,第一种使用( ),第二种使用内置的函数tuple()进行创建.如果元组中的元素只有一个则需要加上逗号. # author: 爪哇斗罗(javaDouLuo

  • Python学习之列表和元组的使用详解

    目录 列表和元组简介 列表学习要点 列表的声明语法 列表的读取 列表操作 列表元素的修改和删除 列表元素合并 列表元素顺序变化 元组学习要点 元组基本知识 元组的基本操作 列表和元组简介 如果说在 Python 语言中找一个最优秀的数据类型,那无疑是列表,如果要在推荐一个,那我选择元组,本篇博客我们的重心会放在列表上,元组可以看成不能被修改的列表,所以作为赠品 进行学习即可. 列表是一种非常灵活的数据结构,可以弥补前文字符串类型的很多不足. 正式学习前,还需要记住两个英文单词,列表(list),

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

    目录 python元组的可变与不可变 为什么元组Tuple是不可变的,列表List是可变的 1.所谓元组的不可变指的是元组所指向的内存中的内容不可变 2.List 是可变的 总结 python元组的可变与不可变 学过python的人都知道有一种数据类型叫做元组,而元组与列表最重要的区别就在于元组一经定义就不能改变其内容,但元组中的内容真的是完全不可变的吗,看了下面这段代码想必你也会产生这样的疑问. 代码如下: tuple = (1, 2, 3, [1, 4, 7]) print(tuple) t

  • python变量赋值方法(可变与不可变)

    python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址. 一.可变对象和不可变对象 Python在heap中分配的对象分成两类:可变对象和不可变对象.所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变. 不可变(immutable):int.字符串(string).float.(数值型number).元组(tuple) 可变(mutable):字典型(dictionary).列表型(list) 不可变类型特点: 看下面的例子(例1) i = 73 i +=

  • python函数参数(必须参数、可变参数、关键字参数)

    #python中的函数定义,使用和传参 ###------------------- 必要参数 ------------------------------------- 必要参数,即函数调用时必须要传的参数, #下面进行举例说明 def helloWorld(a): print('输出:hello') if __name__ == '__main__': helloWorld("aaa") ## 必须要有参数 ##------------ 默认参数 -----------------

  • python中的不可变数据类型与可变数据类型详解

    前言 python与C/C++不一样,它的变量使用有自己的特点,当初学python的时候,一定要记住"一切皆为对象,一切皆为对象的引用"这句话,其实这个特点类似于JAVA,所以在python里面大家也不用担心类似于C/C++中的指针的复杂问题, 在python中数据分为可变数据类型,不可变数据类型. 所以在学习python过程中我们一定会遇到不可变数据类型和可变数据类型.下面话不多说了,来一起看看详细的介绍吧 1.名词解释 以下所有的内容都是基于内存地址来说的. 不可变数据类型: 当该

  • Python中可变和不可变对象的深入讲解

    目录 前置知识 有哪些可变对象,哪些不可变对象? 不可变对象和可变对象的区别? 不可变对象的应用场景 从内存角度出发说下有什么区别? 不可变对象 可变对象 从代码角度看看区别 不可变对象-整型 不可变对象-字符串 不可变对象-元组 可变对象列表 Python 函数的参数传递 概念 参数传递不可变对象 参数传递可变对象 总结 前置知识 在 Python 中,一切皆为对象 Python 中不存在值传递,一切传递的都是对象的引用,也可以认为是传址 有哪些可变对象,哪些不可变对象? 不可变对象:字符串.

  • Python 的可变和不可变对象详情

    目录 Python 中的可变和不可变对象 一.文字描述可变和不可变对象 1.可变与不可变对象归类 2.可变与可变对象的区别 3.不可变对象的应用场景 二.代码角度区别 1.不可变对象-整型 2.不可变对象-字符串 3.不可变对象-元组 4.可变对象列表 三.Python 函数的参数传递 1.参数传递不可变对象 2.参数传递可变对象 Python 中的可变和不可变对象 一.文字描述可变和不可变对象 在 Python 中,一切皆为对象 Python 中不存在值传递,一切传递的都是对象的引用,也可以认

  • python数据类型可变与不可变深入分析

    目录 一.可变类型与不可变类型的特点 1.不可变数据类型 2.可变数据类型 二.哪些是可变类型哪些是不可变类型 一.可变类型与不可变类型的特点 1.不可变数据类型 不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值,  而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中

  • Python可变和不可变、类的私有属性实例分析

    本文实例讲述了Python可变和不可变.类的私有属性.分享给大家供大家参考,具体如下: 可变和不可变 items = [] print(id(list)) items.append(2) # items值改变了 print(id(list)) # 但内存地址没有变 id()函数获取内存地址. a = "jack" print(id(a)) b = "jack" print(id(b)) # b内存地址和上面a一样 a = "zhangSan" p

  • python新手学习可变和不可变对象

    python中有可变对象和不可变对象,可变对象:list,dict.不可变对象有:int,string,float,tuple. python不可变对象 int,string,float,tuple 先来看一个例子 def int_test(): i = 77 j = 77 print(id(77)) #140396579590760 print('i id:' + str(id(i))) #i id:140396579590760 print('j id:' + str(id(j))) #j

  • Python可变与不可变数据和深拷贝与浅拷贝

    目录 浅拷贝和深拷贝 什么是可变数据和不可变数据 那么拷贝函数是干什么的? 浅拷贝 深拷贝 总结 浅拷贝和深拷贝 拷贝函数是专门为可变数据类型list.set.dict使用的一种函数.作用是,当一个值指向另一个值的时候,也不会影响指向的值,如果被指向的数据是可变数据,那么它一旦被修改,指向的数据也会随之改变. 什么是可变数据和不可变数据 我们来举一个例子,整型是不可变的数据,那么为什么是不可变的数据呢?一个数据是不是可变的就要关系到python的缓存机制. 当一个数据发生变化,如果它的内存地址没

随机推荐