>>> t=(1,2,3,['a','b','c'],4,5)
>>> t[3][0]='x'
>>> t
(1, 2, 3, ['x', 'b', 'c'], 4, 5) #tuple中嵌套的list中的元素可以改变 >>> t[3][1:3]='y','z' #索性改变全部list元素
>>> t
(1, 2, 3, ['x', 'y', 'z'], 4, 5)

上例可以看到list全部元素改变,但tuple依然不报错,那么可以认为tuple指向的t[3]没变。

我个人初步理解是 为list:['x', 'y', 'z'] 分配的内存空间没变,所以tuple不报错,至于空间指向哪个元素无所谓,用id(obj)查验。

>>> l=['a','b','c']
>>> id(l)
37061960
>>> l[0]='x'
>>> l
['x', 'b', 'c']
>>> id(l)
37061960 #改变一个元素,l的内存地址没变 >>> l[1:3]='y','z'
>>> l
['x', 'y', 'z']
>>> id(l)
37061960 #全部元素改变,依然。 也许可以证明:设定一个list其实是为它创建一个内存地址,这个地址可以指向你想要的元素,而改变list本质上是改变了地址指向的元素,而list的本身内存地址不变,指向谁不影响本身。
#借此可以验证:tuple内元素不可变 指的是元素地址不可变。

关于tuple连接问题

>>> t1=(1,2,3)
>>> id(t1)
36986168
>>> t2=('a','b','c')
>>> id(t2)
36985736
>>> T=t1+t2
>>> T
(1, 2, 3, 'a', 'b', 'c')
>>> id(T)
36206536
>>> id(t1)
36986168 #t2+t2组成一个新tuple:T,但并没有改变t1、t2
>>> id(t2)
36985736 #如果是这样
>>> t1=t1+t2
>>> t1
(1, 2, 3, 'a', 'b', 'c')
>>> id(t1)
36205960 #将t1与t2连接,并将结果赋给t1,相当于杀掉了t1,给他重新指定内存空间,它重生为一个新t1,和原来的id没关系了,自然会有一个新id指向它

最后引出一个问题:python中变量、内存地址、指向 之间的关系。

https://segmentfault.com/q/1010000009064908

python学习笔记(5)—— tuple 本质探究的更多相关文章

  1. Python学习笔记,day5

    Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...

  2. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  3. Python学习笔记(四)函数式编程

    高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...

  4. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  5. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  6. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  7. Python学习笔记(十)

    Python学习笔记(十): 装饰器的应用 列表生成式 生成器 迭代器 模块:time,random 1. 装饰器的应用-登陆练习 login_status = False # 定义登陆状态 def ...

  8. python学习笔记(一)、列表和元祖

    该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.通用的序列操作 有几种操作适用于所有序列,包括索引.切片.相加.相乘和成员资格检查.另外,Pyt ...

  9. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

随机推荐

  1. 工作总结 2018-4-13 bootstrapTable 属性 queryParams: queryParams,//参数 get 中 %5B%5D 数组的意思

    <table id="dataTable" data-toggle="table" data-show-columns="true" ...

  2. ZOJ 3684 Destroy 树的中心

    中心节点就是树的中心,2遍dfs求到树的直径.而中心一定在直径上,顺着直径找到中心就够了. 然后能够一遍树形DP找到最小值或者二分+推断是否訪问到叶子节点. #include <iostream ...

  3. Android仿微信朋友圈图片查看器

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,细致观察是不是发 ...

  4. 网页设计中11 款最好CSS框架

    网页设计和发展领域已经成为竞争激烈的虚拟世界.想要在网络的虚拟世界中生存,仅有一堆静止的在线网络应用是远远不够的,网页必须要有很多功能,配以让人无法抗拒的设计.网页编码一定要合适.精确,才能保证不发生 ...

  5. luogu1155 双栈排序

    题目大意 运用两个栈的push和pop操作使得一个序列单调递增且操作字典序最小.$n\leq 1000$. 题解 本题我们要尝试运用“瞪眼法”,也就是推样例.我们显然要数字尽可能地推入第一个栈.那么问 ...

  6. oracle存储过程和游标的使用

    oracle存储过程和游标的使用 (2011-04-19 14:52:47) 转载▼ 游标: 用来查询数据库,获取记录集合(结果集)的指针,我们所说的游标通常是指显式游标,因此从现在起没有特别指明的情 ...

  7. 美国诚实签经验——IMG全球医疗险,TODO

    那么,诚实签最关键的4个要点 是什么呢? 第一,证明你有一定的经济实力. 可能需要房产.存款等证明,也需要银行信用卡或借记卡半年流水证明(让人信服的每月进帐和消费能力). 这些是为了证明,你可以支付在 ...

  8. C# winfrom TCP 服务端和客户端(链接)

    1.C#Winform TCP 之服务端: 可以参考下面链接,比较好.第二个链接可以看看,提供了一个思路. http://www.cnblogs.com/guolebin7/archive/2013/ ...

  9. 【BZOJ 5165】 树上倍增

    [题目链接] 点击打开链接 [算法] 树上倍增,时间复杂度 : O(qklog(n)) [代码] #include<bits/stdc++.h> using namespace std; ...

  10. [POI2012]FES-Festival

    https://www.zybuluo.com/ysner/note/1252538 题面 有一个数列\(\{a\}\).现给定多组限制,限制分成\(2\)类,第一类是\(a_x+1=a_y\),有\ ...