为什么要创造一个和列表差别不大的容器类型?
元组和列表看起来不同的一点是元组用圆括号而列表用方括号。而最重要的是,元组是不可变类型。这就保证了元组的安全性。
创造元组给它赋值和列表完全一样。除了一个元素的元组要在元组分割符里加一个逗号以防跟普通的分组操作符混淆。

>>> 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):元组的更多相关文章

  1. python基础深入(元组、字符串、列表、字典)

    python基础深入(元组.字符串.列表.字典) 一.列表 1.追加 >>>list = [1,2,3,4] #用于在列表末尾添加新的对象,只能单个添加,该方法无返回值,但是会修改原 ...

  2. python基础数据类型--元组(tuple)

    python基础数据类型--元组(tuple) 一.元组的定义和特性 定义:与列表相似,只不过就是将[ ] 改成 ( ) 特性:1.可以存放多个值 2.不可变 3.按照从左到右的顺序定义元组元素,下标 ...

  3. python3速查参考- python基础 4 -> 元组 + 字典 + 字符串 的学习

    元组 元组:特点就是内容不可变,算只读的列表,可以被查询,不能被修改 a = 2, print(a) print(type(a)) b = ('a','b','c') print(b[1]) 运行结果 ...

  4. python基础之元组、文件操作、编码、函数、变量

    1.集合set 集合是无序的,不重复的,主要作用: 去重,把一个列表变成集合,就可以自动去重 关系测试,测试两组数据的交集,差集,并集等关系 操作例子如下: list_1 = [1,4,5,7,3,6 ...

  5. 2.python基础深入(元组、字符串、列表、字典)

    一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...

  6. python基础之元组(Tuple)、字典(Dictionary)详解

    元组定义 元组是另一个数据类型,类似于List(列表). 元组用”()”标识.内部元素用逗号隔开.但是元素不能二次赋值,相当于只读列表. 举例: tuple = ( ‘abcd’, 786 , 2.2 ...

  7. python基础之元组,集合

    一.元组 为何要有元组,存放多个值,元组不可变,更多的是用来做查询 t=(,[,],,)) #t=tuple((,[,],,))) print(type(t)) 元组可以作为字典的key d={(,, ...

  8. Python基础之元组

    元组初识 元组的认识 首先,我们来认识一下元组: # 定义一个元组 uesr_tuple = ("zhangsan", "lisi", "wangwu ...

  9. Python基础之元组和字典

    一.元组: 1.定义: 内存图: 2.基本操作 3.元组作用: 4.元组基础知识代码 # . 创建空元组 t01 = () t02 = tuple() # . 创建具有默认值的元组 t01 = (,, ...

随机推荐

  1. Python面向对象-类成员

    类的成员可以分为三大类:字段.方法和属性: 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的多少,在 ...

  2. ACM 第十七天

    暑期热身赛 BAPC 2014 The 2014 Benelux Algorithm Programming Contest 题目网址:https://odzkskevi.qnssl.com/3655 ...

  3. 【Docker 命令】- build命令

    docker build 命令用于使用 Dockerfile 创建镜像. 语法 docker build [OPTIONS] PATH | URL | - OPTIONS说明: --build-arg ...

  4. Java调用WebService之Axis实现

    import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @ClassName: TestAxi ...

  5. SQL查询数据总结

    SQL查询数据 完整语法 Select [select选项] 字段列表[字段别名]/* from 数据源 [where条件子句] [group by子句] [having子句] [order by子句 ...

  6. 前端基础:CSS属性操作

    CSS属性操作 1.文本 文本颜色:color,颜色属性被用来设置文字的颜色,颜色是通过CSS经常指定的,其格式有: 1.十六进制:#FF0000: 2.RGB值:RGB(255,0,0): 3.颜色 ...

  7. Go语言【第五篇】:Go条件语句

    Go语言条件 条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,并在条件为false的情况再执行另外的语句.下图展示了程序语言中条件语句的结构: Go语言提 ...

  8. BZOJ4241 历史研究(莫队)

    如果分块的话与区间众数没有本质区别.这里考虑莫队. 显然莫队时的删除可以用堆维护,但多了一个log不太跑得过. 有一种叫回滚莫队的trick,可以将问题变为只有加入操作.按莫队时分的块依次处理,一块中 ...

  9. P1491 集合位置

    题目描述 每次有大的活动,大家都要在一起“聚一聚”,不管是去好乐迪,还是避风塘,或者汤姆熊,大家都要玩的痛快.还记得心语和花儿在跳舞机上的激情与释放,还记得草草的投篮技艺是如此的高超,还记得狗狗的枪法 ...

  10. POJ2352:Stars——题解

    http://poj.org/problem?id=2352 Astronomers晚上仰望星空,看到了很多星星.回到办公桌,Astronomers将这些星星画到二维坐标系,每个星星的坐标都是整数.例 ...