python学习笔记(5)—— tuple 本质探究
>>> 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 本质探究的更多相关文章
- Python学习笔记,day5
Python学习笔记,day5 一.time & datetime模块 import本质为将要导入的模块,先解释一遍 #_*_coding:utf-8_*_ __author__ = 'Ale ...
- Deep learning with Python 学习笔记(10)
生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...
- Python学习笔记(四)函数式编程
高阶函数(Higher-order function) Input: 1 abs Output: 1 <function abs> Input: 1 abs(-10) Output: 1 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Python学习笔记(十)
Python学习笔记(十): 装饰器的应用 列表生成式 生成器 迭代器 模块:time,random 1. 装饰器的应用-登陆练习 login_status = False # 定义登陆状态 def ...
- python学习笔记(一)、列表和元祖
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.通用的序列操作 有几种操作适用于所有序列,包括索引.切片.相加.相乘和成员资格检查.另外,Pyt ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
随机推荐
- cocos2d-x中绘制3D图形--3D ToolKit for cocos2dx实现原理
首先:了解具体情况请看这里:https://github.com/wantnon2/3DToolKit-for-cocos2dx 在看代码之前,最好还是先把项目git下来执行一下demoproject ...
- android application类简单介绍(一)
每次应用程序执行时.应用程序的application类保持实例化的状态. 通过扩展applicaiton类,能够完毕下面3项工作: 1.对android执行时广播的应用程序级事件如低低内做出响应. 2 ...
- rsync 3.1.1源代码编译安装配置
http://rsync.samba.org/ rsync-3.1.1.tar.gz ---0.卸载rpm # yum remove rsync -----1.安装: tar -zxvf rsync- ...
- linux 打包 压缩
序 1.gzip 2.bzip2 3.tar 序 压缩优点 1.节省空间 2.节省带宽 解决脉络 如今有各种压缩文件形式,原因何在?主要是压缩技术更新换代,压缩方法不全然同样.不同的后缀 ...
- docker init 起步
#yum install wget http://fedora.mirror.nexicom.net/epel/6/x86_64/epel-release-6-8.noarch.rpm yum -y ...
- 解决burp suite 使用chrome訪问https失真的问题
用burp suite 訪问https网页 尤其使用chrome(有时候firefox也会) 会出现js或者css载入不出来的情况 这样的时候,导出burp suite的证书,保存为cer格式 然后进 ...
- Python常用数据处理函数
1.基本统计特征函数 方法名 函数功能 所属库 使用格式 sum() 计算数据样本综合(按列计算) Pandas D.sum() mean() 计算数据样本算数平均数 Pandas D.mean() ...
- JavaScript基础 -- js常用内置方法和对象
JS中常用的内置函数如下: 1.eval(str):计算表达式的结果. 2.parseInt(str,n):将符串转换成整数数字形式(可指定几进制). 3.parseFloat(str):将字符串转换 ...
- initial ram filesystem
1 制作最简单的initramfs 1.1 创建init #include <stdio.h> int main() { printf ("\n"); printf ( ...
- 2-4 Vue中的属性绑定和双向数据绑定
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...