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 是引用类型(是可变的)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
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的缓存机制. 当一个数据发生变化,如果它的内存地址没
随机推荐
- d3.js实现简单的网络拓扑图实例代码
- javascript实现随机读取数组的方法
- Commons beanutils组件简介
- JavaScript CSS修改学习第三章 修改样式表
- 一起来写段JS drag拖动代码
- asp.net B2B网站对接支付宝接口
- laravel安装和配置教程
- mysql事件的开启和调用
- javascript学习小结之prototype
- Java中对list元素进行排序的方法详解
- mysql更新一个表里的字段等于另一个表某字段的值实例
- php实现比较两个字符串日期大小的方法
- 解决jQuery ajax请求在IE6中莫名中断的问题
- 人气永夺冠军 教你无限自动刷票(图)
- java连接Oracle数据库的工具类
- Android下拉刷新ListView——RTPullListView(demo)
- 详解在.net中读写config文件的各种方法
- C#实现两个时间相减的方法
- php微信开发之上传临时素材
- Android中DialogFragment自定义背景与宽高的方法