“可变”的tuple
2016-04-02 12:48
225 查看
“可变”的tuple
前面我们看到了tuple一旦创建就不能修改。现在,我们来看一个“可变”的tuple:>>> t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 个元素:'a','b'和一个list:['A', 'B']。list作为一个整体是tuple的第3个元素。list对象可以通过 t[2] 拿到:
>>> L = t[2]
然后,我们把list的两个元素改一改:
>>> L[0] = 'X' >>> L[1] = 'Y'
再看看tuple的内容:
>>> print t ('a', 'b', ['X', 'Y'])
不是说tuple一旦定义后就不可变了吗?怎么现在又变了?
别急,我们先看看定义的时候tuple包含的3个元素:
当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple变为:
表面上看,tuple的元素确实变了,但其实变的不是 tuple 的元素,而是list的元素。
tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!
理解了“指向不变”后,要创建一个内容也不变的tuple怎么做?那就必须保证tuple的每一个元素本身也不能变。
任务
定义了tuple:t = ('a', 'b', ['A', 'B'])
由于 t 包含一个list元素,导致tuple的内容是可变的。能否修改上述代码,让tuple内容不可变?
?不会了怎么办
['A', 'B']是list,因此内容可变,但('A', 'B')的内容是不可变的。
参考代码:
t = ('a', 'b', ('A', 'B')) print t
相关文章推荐
- 你的第一桶金是如何赚到的?
- java虚拟机 jvm 局部变量表实战
- java虚拟机 jvm 局部变量表实战
- SUM 大数取余 欧拉定理 二项展开 数论
- 用Swift完成不同View Controller之间的切换
- 多态在 Java 和 C++ 编程语言中的实现比较
- HDU - 1540 Tunnel Warfare
- eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法
- C++-优先级队列
- bash shell的操作环境
- LOGIN前端验证
- 【C语言】编写一个函数实现n^k,使用递归实现
- OSI七层协议模型和TCP/IP四层模型比较
- 二叉搜索树与双向链表
- Visual Studio Code中配置GO开发环境
- php+html 实现加减乘除
- 【细说Java】Java封箱拆箱的一些问题
- php的exit和die
- mac PHP开发环境搭建
- svn 清理失败 (cleanup 失败) 的解决方法