python可变与不可变数据类型+深浅拷贝
转自:https://www.cnblogs.com/miaomiaokaixin/p/11497813.html
一:学习内容
- python3中六种数据类型
- python赋值
- python浅拷贝
- python深拷贝
二:python3六种数据类型
1.六种数据类型
- Number(数字)
- string(字符串)
- List(列表)
- Tuple(元祖)
- Set(集合)
- Dictionary(字典)
2.六种数据类型分类
- 不可变数据(3个):Number、String、Tuple
- 可变数据(3个):List、Dictionary、Set
3.六种类型总结
- Number(数字):支持 int(整形)、float(浮点型)、bool(布尔型)、complex(复数). 只有一个整数类型int,表示为长整型;没有python2中的long。
- String(字符串):字符串使用双引号或是单引号括起来,同时使用反斜杠转义特殊字符;索引以0为开始值,-1为从末尾的开始位置。
- List(列表):列表写在 [] 之间,元素之间用逗号隔开;索引以0为开始值,-1为从末尾的开始位置;列表元素类型可以不同,由数字、字符串、列表(所谓的嵌套)组成;有序的对象集合。
- Tuple(元组):元组写在()之间,元素之间用逗号隔开;元组元素类型可以不同,由数字、字符串、元组等组成;元组的元素不可变,但是可以包含可变的对象,比如list列表;有序的对象集合;构造一个元素的元组,需要在元素后面加上逗号。
- Dictionary(字典):字典写在{}之间,由键(key):值(value)对集合组成,元素之间用逗号隔开;字典中的元素通过键来存取,而不是通过偏移存取;键key必须使用不可变类型,同一个字典中,键必须是唯一的;创建空字典使用 {}。
- Set(集合):集合写在{}之间,基本功能是进行成员关系测试和删除重复元素;可使用大括号 {}或者set()函数创建集合;创建一个空集合必须是set(),{}代表的是空字典。
三:python赋值
1.赋值(=):数据完全共享
赋值是在内存中指向同一个对象:
如果是可变(mutable)类型,比如列表、字典、集合,修改其中一个,另一个必定改变
如果是不可变类型(immutable),比如数字、字符串、元组,修改了其中一个,另一个并不会变
2.举例说明--可变类型赋值:列表、字典、集合
====s1是可变类型列表,s1赋值给s2,然后修改s1,s2就会跟着改变
s1 = [1,2,3]
s2 = s1
s1.append(4)
s1
s2
====s3是可变类型字典,s3赋值给s4,然后修改s3,s4就会跟着改变
s3= {"name":"tester"}
s4 = s3
s3["age"] = 18
s3
s4
====s5是可变类型集合,s5赋值给s6,然后修改s5,s6就会跟着改变
s5= set([1,2,3,4])
s6 = s5
s5.add(5)
s5
s6
3.举例说明--不可变类型赋值:数字、字符串、元组
====s1是不可变类型数字,s1赋值给s2,然后修改s1,s2不会跟着改变
s1 = 10
s2 = s1
s1=12
s1
s2
====s3是不可变类型字符串,s3赋值给s4,然后修改s3,s4不会跟着改变
s3 = "testing"
s4 = s3
s3= "tesing testing"
s3
s4
====s5是不可变类型元组,s5赋值给s6,然后修改s5,s6不会跟着改变
s5 = (1,2,3)
s6 = s5
s5= (1,2,3,4)
s5
s6
四:python浅拷贝
1.浅拷贝:数据半共享(拷贝第一层的数据,具有自己单独的内存地址;嵌套层即第二层或其他层不拷贝,指向原有的内存地址)
2.原则
只复制一层,他变我不变;其余层,他变我也变。
如果只有一层,就相当于深拷贝了
3.方法-三种
第一种:a = b[:]
第二种:a = b.copy()
第三种:引用copy模块,import copy | a = copy.copy(b)
4.举例--浅拷贝
s1 = [1,2,3,[4,5,6]]
#浅拷贝
s2 = s1[:]
#s1第一层改变,s2不会跟着改变
s1[2] = 55
s1
s2
#s1第二层即嵌套层改变,s2也跟着改变
s1[3][0] = 66
s1
s2
图解上述过程:
s2在内存中已经独立出s1第一层的数据,第二层的数据并没有拷贝成功,而是指向了s1中的第二层数据的内存地址
所以就会有:
s1中第一层数据发生变化,s2中第一层数据不跟着改变
s1中第二层数据发生变化,s2中第二层数据也发生变化
五:python深拷贝
1.深拷贝:数据完全不共享(复制其数据完完全全放独立的一个内存,完全拷贝,数据不共享)
2.原则
他变我也变。
3.方法
引用copy模块,import copy | a = copy.deepcopy(b)
4.举例--深拷贝
import copy
s1 = [1,2,3,[4,5,6]]
#深拷贝
s2 = copy.deepcopy(s1)
#s1第一层改变,s2不会跟着改变
s1[2] = 55
s1
s2
#s1第二层即嵌套层改变,s2也不会跟着改变
s1[3][0] = 66
s1
s2
图解上述过程:
s2在内存中已经独立出s1的数据
所以就会有:
s1中第一层数据发生变化,s2中第一层数据不跟着改变
s1中第二层数据发生变化,s2中第一层数据也不跟着改变
python可变与不可变数据类型+深浅拷贝的更多相关文章
- day2学python 数据类型+深浅拷贝+循环
数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- 6.Python初窥门径(小数据池,集合,深浅拷贝)
Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...
- python基础-3 集合 三元运算 深浅拷贝 函数 Python作用域
上节课总结 1 运算符 in 字符串 判断 : “hello” in "asdasfhelloasdfsadf" 列表元素判断:"li" in ['li', ...
- python语法基础-基础-赋值与深浅拷贝
##################################### 预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,我们还是要花一点时 ...
- Python编码、集合set、深浅拷贝
编码 : a.encode(' ') windows 默认编码GBK ASCII : 最早的编码. ⾥⾯有英⽂⼤写字⺟, ⼩写字⺟, 数字, ⼀些特殊字符.没有中⽂, 8个01代码, 8个bi ...
- python的小数据池和深浅拷贝
小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于 ...
- Core Python Programming一书中关于深浅拷贝的错误
该书关于深浅拷贝的论述: 6.20. *Copying Python Objects and Shallow and Deep Copies "when shallow copies are ...
- 【python】变量的赋值、深浅拷贝
python——赋值与深浅拷贝 https://www.cnblogs.com/Eva-J/p/5534037.html 啥都不说,看这个博主的文章!
- python之路---07 join() fromkeys() 深浅拷贝
二十四.基本数据类型补充 1.join() "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. ...
随机推荐
- ajax前后端交互原理(6)
6.XMLHttpRequest对象 XMLHttpRequest 是一个 API,它为客户端提供了在客户端和服务器之间传输数据的功能.它提供了一个通过 URL 来获取数据的简单方式,并且不会使整个页 ...
- RS232/485通信方式 保存和加载时数据的处理
RS232/485通信方式 数据以RS232/485方式通信时,以0xA5作为开始码,以0xAE作为结束码.在开始码和结束码之间的0xA5, 0xAA, 0xAE数据需要进行转码. PC端发送数据时将 ...
- JavaScript中bool类型的转化
JavaScript 中 if() 圆括号中的表达式将被看做布尔值来处理.这时就涉及到一些转化的问题. 1.特殊值undefined和null变成false. 2.数字0和NaN变成false. 3. ...
- tableau入门学习笔记--分页功能
最近在使用tableau来制作报表,对于tableau也是第一次接触并使用,每天学习些新的功能来记录在博客里,给他人方便,也给自己方便 tableau分页功能 很多时候由于工作表过长而出现拖拽条,如果 ...
- JSTL版本问题
JSTL的版本有很多,和Servlet,jsp,tomcat都有版本兼容的问题,以下是收藏的相关帖子 JSTL不同版本和EL表达式的关联 https://www.cnblogs.com/yangzh ...
- idea 链接 Tomcat 出现的错误 Application server libraries not found
红色字体是重点 好久好久没有上来了.一直忙于工作没事有时间进行总结. 最近在家隔离期间发现了一个好玩的游戏率土之滨 , 玩的不错和大盟主混的很好.在给盟里做考勤任务的时候发现很麻烦还需要用Excel ...
- Vs Code推荐安装插件
前言: Visual Studio Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的Vs Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持 ...
- h5页面自动播放视频、音频_关于媒体文件自动全屏播放的实现方式
在移动端(ios和android)播放视频的时候,我们即使定义了autoplay属性,仍然不能自动播放.这是由于手机浏览器为了防止浪费用户的网络流量,在默认情况下是不允许媒体文件自动播放的,除非用户自 ...
- 【线型DP模板】最上上升子序列(LIS),最长公共子序列(LCS),最长公共上升子序列(LCIS)
BEGIN LIS: 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的.对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序 ...
- 洛谷 P3627 [APIO2009]抢掠计划 Tarjan缩点+Spfa求最长路
题目地址:https://www.luogu.com.cn/problem/P3627 第一次寒假训练的结测题,思路本身不难,但对于我这个码力蒟蒻来说实现难度不小-考试时肛了将近两个半小时才刚肛出来. ...