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

>>> 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. 测试下markdown!

    目录 目的 代码 目的 测试markdown 代码 void static void main(args String[]){ System.out.println("hollw" ...

  2. 使用DataTables导出html表格

    去年与同事一起做一个小任务,需要把HTML表格中的数据导出到Excel.用原生js想要实现,只有IE浏览器提供导出到微软的Excel的接口,这就要求你电脑上必须安装IE浏览器.Excel,而且必须修改 ...

  3. 第三课——MFC编程

    一.MFC概述 1. MFC简述 MFC不仅仅是一套基础类库,更是一种编程方式. 2. MFC由来 1987年微软公司推出了第一代Windows产品,并为应用程序设计者提供了Win16(16位Wind ...

  4. 【week5】psp

    本周psp psp饼图: 随笔字数折线图: 代码行折线图:

  5. 苹果IOS、安卓推送功能开发

    IOS推送开发:以下是基于开源javapns推送开发1.DerInputStream.getLength(): lengthTag=111, too big.先排除是否由于打包时证书 .p12 文件被 ...

  6. 【Python】python学习之总结

    迭代器: def gen(): a = yield a a = a * yield a for i in gen(): print(i) 创建一个函数,循环体,yield循环到此就返回一个值.调用函数 ...

  7. 【Python】python 调用c语言函数

    虽然python是万能的,但是对于某些特殊功能,需要c语言才能完成.这样,就需要用python来调用c的代码了具体流程:c编写相关函数 ,编译成库然后在python中加载这些库,指定调用函数.这些函数 ...

  8. RT-thread-2.0.1移植(基于STM32F4xx)

    1.将下载的rt-thread-2.0.1解压后,得到如下图所示的文件列表. 在bsp目录下可以找到stm32f40x文件夹,这文件夹里面包括了库函数,其他芯片平台的文件夹统统删掉.在libcpu下, ...

  9. Java语言有哪些特点?

    1)简单 如果同学们学过C++语言,就会感觉Java眼熟,因为Java中许多基本语句的语法和C++是一样的,像常用的循环语句.控制语句等和C++几乎相同.需要注意的是,Java和C++时两种完全不同的 ...

  10. (一)MySQL学习笔记

    1.MySQL安装 下载地址:https://dev.mysql.com/downloads/mysql/ 启动mysql服务 net start mysql 停止mysql服务 net stop m ...