python3笔记十四:python可变与不可变数据类型+深浅拷贝
一:学习内容
- 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中第一层数据也不跟着改变
python3笔记十四:python可变与不可变数据类型+深浅拷贝的更多相关文章
- python3笔记十:python数据类型-Tuple元组
一:学习内容 元组概念 元组创建.访问.删除 元组操作 元组方法 二:元组概念 1.本质:是一种有序集合 2.特点:与列表非常相似.一旦初始化就不能修改.使用小括号 三:元组创建 1.创建空元组 tu ...
- python学习笔记(十四)python实现发邮件
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart u ...
- python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法
python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...
- python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例
python3.4学习笔记(十四) 网络爬虫实例代码,抓取新浪爱彩双色球开奖数据实例 新浪爱彩双色球开奖数据URL:http://zst.aicai.com/ssq/openInfo/ 最终输出结果格 ...
- python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...
- 《C++游戏开发》笔记十四 平滑过渡的战争迷雾(二) 实现:真正的迷雾来了
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9712321 作者:七十一雾央 新浪微博:http:/ ...
- 二十四. Python基础(24)--封装
二十四. Python基础(24)--封装 ● 知识结构 ● 类属性和__slots__属性 class Student(object): grade = 3 # 也可以写在__slots ...
- 十四. Python基础(14)--递归
十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...
- day2学python 数据类型+深浅拷贝+循环
数据类型+深浅拷贝+循环 别的语言的数组 python不用定义 直接使用 color=['红','橙','黄','绿','青','蓝','紫'] print(color[1:3]) //打印[1,3) ...
随机推荐
- Linux(16):Shell编程(3)
vim 编程环境配置: .vimrc 文件配置如下:(.vimrc文件放到家目录下:/root :然后退出 xshell 再登陆进来xshell) set nocompatible set histo ...
- kinit: Bad encryption type while getting initial credentials
描述:RHEL 6.x主机执行kinit -kt命令报如下错误 [heboan@localhost~]$ kinit -kt heboan.keytab heboan kinit: Bad encry ...
- 【转载】Linux GCC常用命令
作者:ggjucheng 出处:https://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html 1简介 2简单编译 2.1预处理 2 ...
- Spring IOC的简单实现
简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法即可. 原理简单说明: Sp ...
- 设置Windows静态IP+动态IP
静态IP 设置以太网属性 进入IPv4属性 设置IPv4 动态IP 同上方法,只不过选成了自动
- (转)Java8内存模型-永久代(PermGen)和元空间(Metaspace)
原文链接:https://www.cnblogs.com/paddix/p/5309550.html 一.JVM内存模型 根据jvm规范,jvm内存共分为虚拟机栈.堆.方法区.程序计算器.本地方法栈五 ...
- 基于nginx与Tomcat实现负载均衡
server1:192.168.200.113(nginx服务端) server2:192.168.200.111(Tomcat服务端) server1中nginx的配置文件 nginx.conf h ...
- 最完美ThinkPHP Nginx 配置文件
一个配置文件,完美支持普通,兼容,pathinfo,rewrite4种url模式,别怪我没提醒你收藏哦. 常见的静态文件404时也不会再去跑一遍fastcgi浪费资源. server { listen ...
- Vue自行封装常用组件-弹出框
使用方法: 1.在父组件中引入"box.vue" //import popUpBox from "./box.vue"; 2.在父组件中注册 popUpBo ...
- 心态炸了,我再写一个4.1.0版本的SND实例
maven依赖 <!-- Tests --><dependency> <groupId>org.springframework</groupId> &l ...