>>> 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. jQuery异步框架探究1:jQuery._Deferred方法

    jQuery异步框架应用于jQuery数据缓存模块.jQuery ajax模块.jQuery事件绑定模块等多个模块,是jQuery的基础功能之中的一个.实际上jQuery实现的异步回调机制能够看做ja ...

  2. Xcode iOS9.3 配置包 iOS10.0 配置包 iOS10.2 配置包 could not find developer disk image

    在Finder状态下前往目录.快捷键:shift+command+G,填写路径/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS ...

  3. Codeforces Round #306 (Div. 2) A B C

    题目链接:http://codeforces.com/contest/550 A 暴力一发. 代码: #include <iostream> #include <stdio.h> ...

  4. python爬虫【第2篇】【多进程】

    一.多进程 1.fork方法(os模块,适用于Lunix系统) fork方法:调用1次,返回2次.原因:操作系统经当前进程(父进程)复制出一份进程(子进程),两个进程几乎完全相同,fork方法分别在父 ...

  5. ios7 UIBarButtonItem 默认蓝色

    [self.navigationItem setLeftBarButtonItem:leftButton]; 这样设置在ios7上button默认是蓝色 解决方法: leftButton.tintCo ...

  6. JSON入门指南

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,很适合于server与 JavaScript 的交互.本文将高速解说 JSON 格式.并通过代码演示样 ...

  7. 跨线程访问UI控件时的Lambda表达式

    工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...

  8. BZOJ1202 [HNOI2005]狡猾的商人 并查集维护前缀和

    1202: [HNOI2005]狡猾的商人 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1935  Solved: 936[Submit][Stat ...

  9. 【bzoj3288】Mato矩阵

    题目大意:给定一个n阶行列式,第i行第j列为GCD(i,j),求这个行列式的值 高斯消元之后发现对角线上的东西是phi 于是线性筛出所有的欧拉函数即可 #include<algorithm> ...

  10. 在linux上处理base64加密和解密

    http://snailwarrior.blog.51cto.com/680306/142472/ 2.从标准输入读取文件内容,base64编码并打印到标准输出 [root@localhost tes ...