2015/9/2 Python基础(7):元组
为什么要创造一个和列表差别不大的容器类型?
元组和列表看起来不同的一点是元组用圆括号而列表用方括号。而最重要的是,元组是不可变类型。这就保证了元组的安全性。
创造元组给它赋值和列表完全一样。除了一个元素的元组要在元组分割符里加一个逗号以防跟普通的分组操作符混淆。
>>> aTuple = (1)
>>> aTuple
1
>>> aTuple = (1,)
>>> aTuple
(1,)
访问元组的值和列表也一样。
更新元组和更新字符串一样,要再构造一个新字符串,删除一个单独的元组元素以不可能的。只能显式地删除一整个元组,当然我们并不需要这么做。
元组和列表一样也没有自己专用的运算符和内建函数。因为元组本身是不可变的,所以这些操作对元组来说就是多余的,没有什么意义。
元组的特殊特性
元组的不可变导致我们不能改变其中的一个或多个元素,这样在我们传递数据给一个不了解的API时,可以保证我们的数据不会被修改。
而当我们需要操作从一个函数返回的元组时,可以用list()函数把它转换成一个列表。
元组的不可变也不是那么的不可变,我们可以像操作字符串一样连接、重复等等操作。还有是,虽然元组对象本身是不可变的,但是不代表它包含的可变对象是不可变的,比如说元组里存在数组:
>>> t = (['xyz', 123], 23, -103.4)
>>> t
(['xyz', 123], 23, -103.4)
>>> t[0][1]
123
>>> t[0][1] = ['abc', 'def']
>>> t
(['xyz', ['abc', 'def']], 23, -103.4)
所有的多对象的,逗号分隔的,没有明确用符号定义的等等这些集合的默认类型都是元组。
>>> 'abc', -4.24e93, 18+6.6j, 'xyz'
('abc', -4.24e+093, (18+6.6j), 'xyz')
>>>
>>> x, y = 1, 2
>>> x, y
(1, 2)
同样的,所有函数返回的多对象,不包括有符号封装的,都是元组。
作为字典的关键字
不可变对象的值不可变,意味着通过hash算法得到的值总是一个值。这是作为字典键值的必要条件。
拷贝Python对象
浅拷贝和深拷贝
浅拷贝的意思是创建一个和原对象一样的对象类型,其内容是原对象的引用。如下:
>>> person = ['name', ['savings', 100.0]]
>>> hubby = person[:]
>>> origin = ['abc',['def',12.3]]
>>> copy1 = origin[:]
>>> copy2 = list(origin)
>>> [id(x) for x in origin, copy1, copy2]
[47106648, 47107008, 47104328]
>>> [id(x) for x in origin[0], copy1[0], copy2[0]]
[4172448, 4172448, 4172448]
而因为我们是在浅拷贝,改变其中一份拷贝并不会影响另一份
>>> copy1[0] = 'change'
>>> copy1
['change', ['def', 12.3]]
>>> copy2
['abc', ['def', 12.3]]
与之相对的就是深拷贝:
>>> origin = ['abc',['def',12.3]]
>>> copy1 = origin
>>> copy2 = origin
>>> copy1[0] = 'change'
>>> copy1
['change', ['def', 12.3]]
>>> copy2
['change', ['def', 12.3]]
深拷贝的id指向了同样的量
>>> [id(x) for x in origin, copy1, copy2]
[47106648, 47106648, 47106648]
深浅拷贝还可以通过copy模块里的函数实现,copy.copy()是浅拷贝,copy.deepcopy()是深拷贝。
2015/9/2 Python基础(7):元组的更多相关文章
- python基础深入(元组、字符串、列表、字典)
python基础深入(元组.字符串.列表.字典) 一.列表 1.追加 >>>list = [1,2,3,4] #用于在列表末尾添加新的对象,只能单个添加,该方法无返回值,但是会修改原 ...
- python基础数据类型--元组(tuple)
python基础数据类型--元组(tuple) 一.元组的定义和特性 定义:与列表相似,只不过就是将[ ] 改成 ( ) 特性:1.可以存放多个值 2.不可变 3.按照从左到右的顺序定义元组元素,下标 ...
- python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习
元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...
- python基础之元组、文件操作、编码、函数、变量
1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...
- 2.python基础深入(元组、字符串、列表、字典)
一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...
- python基础之元组(Tuple)、字典(Dictionary)详解
元组定义 元组是另一个数据类型,类似于List(列表). 元组用”()”标识.内部元素用逗号隔开.但是元素不能二次赋值,相当于只读列表. 举例: tuple = ( ‘abcd’, 786 , 2.2 ...
- python基础之元组,集合
一.元组 为何要有元组,存放多个值,元组不可变,更多的是用来做查询 t=(,[,],,)) #t=tuple((,[,],,))) print(type(t)) 元组可以作为字典的key d={(,, ...
- Python基础之元组
元组初识 元组的认识 首先,我们来认识一下元组: # 定义一个元组 uesr_tuple = ("zhangsan", "lisi", "wangwu ...
- Python基础之元组和字典
一.元组: 1.定义: 内存图: 2.基本操作 3.元组作用: 4.元组基础知识代码 # . 创建空元组 t01 = () t02 = tuple() # . 创建具有默认值的元组 t01 = (,, ...
随机推荐
- 有关c#的学习笔记整理与心得
[ 塔 · 第 一 条 约 定 ] 整理c#:Array Arraylist List Hashtable Dictionary Stack Queue等 Array 的容量是固定的,而 ArrayL ...
- ACM 第十天
动态规划2 1.树形DP 2.概率DP 3.区间DP 模板 ; len < n; len++) { //操作区间的长度 , j = len; j <= n; i++, j++) { //始 ...
- Linux系统的性能测试
性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench 一.CPU物理个数.内核.超线程.多核心 1.登录Terminal,执行:cat /proc/cpuinfo,就会显示出主机的CPU详 ...
- InstallShield Limited Edition for Visual Studio 国内注册时国家无下拉框解决方法
注册地址:http://learn.flexerasoftware.com/content/IS-EVAL-InstallShield-Limited-Edition-Visual-Studio 火狐 ...
- 【转】Unity+单例模式的依赖注入
http://www.cnblogs.com/floyd/archive/2009/06/17/1505117.html
- [BZOJ2961] 共点圆 [cdq分治+凸包]
题面 BZOJ传送门 思路 首先考虑一个点$(x_0,y_0)$什么时候在一个圆$(x_1,y_1,\sqrt{x_1^2+y_1^2})$内 显然有:$x_1^2+y_1^2\geq (x_0-x_ ...
- ocker nginx 配置反向代理和负载均衡
1. 获取及配置nginx 如果需要全站通过docker部署,那么nginx或许是不可或缺的.通过配置nginx,可以迅速实现负载均衡和反向代理服务.值得一提的是,docker官网恰好也有nginx镜 ...
- BZOJ 1010: [HNOI2008]玩具装箱toy | 单调队列优化DP
原题: http://www.lydsy.com/JudgeOnline/problem.php?id=1010 题解: #include<cstdio> #include<algo ...
- UVA.10066 The Twin Towers (DP LCS)
UVA.10066 The Twin Towers (DP LCS) 题意分析 有2座塔,分别由不同长度的石块组成.现在要求移走一些石块,使得这2座塔的高度相同,求高度最大是多少. 问题的实质可以转化 ...
- github clone 指定的tag
git clone --branch [tags标签] [git地址] 使用branch参数,后面加上tag标签,最后是git仓库的地址