Python3学习笔记(九):赋值,浅拷贝和深拷贝区别
一、变量赋值
在Python可变数据类型(列表,字典,集合)中,把一个可变数据类型的变量赋给另一个变量,这两个变量引用的是同一个对象,内存地址是一样的,修改当中的一个变量,另一个变量相应也会被修改
>>> a = [1,2,3,4,5]
>>> b = a
>>> id(a)
2846410718600 # 变量a的内存地址
>>> id(b)
2846410718600 # 变量b的内存地址
>>> a[0]=0
>>> a
[0, 2, 3, 4, 5]
>>> b
[0, 2, 3, 4, 5]
二、浅拷贝
拷贝了一个对象的顶层,只拷贝了对象的"引用"
>>> a = [[1,2,3],4,5]
>>> b = a.copy()
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> id(a) # 变量a的内存地址
2846410784136
>>> id(b) # 变量b的内存地址
2846410717512
>>> id(a[0]) # 变量a中第一个元素的内存地址
2846410718152
>>> id(b[0])
2846410718152 # 变量b中第一个元素的内存地址
修改对象中的不可变类型数据,另一个变量不受影响;修改对象中的可变类型子数据,另一个变量相应改变
>>> a = [[1,2,3],4,5]
>>> b = a.copy()
>>> a[1] = 6 # 修改的为不可变数据类型
>>> a
[[1, 2, 3], 6, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> a[0][1]=0 # 修改的为可变(列表中的数据)数据类型
>>> a
[[1, 0, 3], 6, 5]
>>> b
[[1, 0, 3], 4, 5]
三、深拷贝
对对象中的每一层都进行了拷贝,拷贝后的对象与原对象为完全独立,没有任何关系。
>>> from copy import deepcopy
>>> a = [[1,2,3],4,5]
>>> b = deepcopy(a)
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> id(a)
2846410715976
>>> id(b)
2846410515720
>>> id(a[0])
2846410717896
>>> id(b[0])
2846410718856
即使修改当中一个变量的可变类型子数据,另一个变量也不会受影响
>>> from copy import deepcopy
>>> a = [[1,2,3],4,5]
>>> b = deepcopy(a)
>>> a
[[1, 2, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
>>> a[0][1]=0
>>> a
[[1, 0, 3], 4, 5]
>>> b
[[1, 2, 3], 4, 5]
Python3学习笔记(九):赋值,浅拷贝和深拷贝区别的更多相关文章
- python3学习笔记九(if语句)
# !/usr/bin/python3 斐波那数列,两个元素的总和确定下一个数a,b = 0,1while b < 1000: print(b,end=',') a, b = b, a+bpri ...
- python3.4学习笔记(九) Python GUI桌面应用开发工具选择
python3.4学习笔记(九) Python GUI桌面应用开发工具选择 Python GUI开发工具选择 - WEB开发者http://www.admin10000.com/document/96 ...
- Go语言学习笔记九: 指针
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这 ...
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- 多线程学习笔记九之ThreadLocal
目录 多线程学习笔记九之ThreadLocal 简介 类结构 源码分析 ThreadLocalMap set(T value) get() remove() 为什么ThreadLocalMap的键是W ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- MDX导航结构层次:《Microsoft SQL Server 2008 MDX Step by Step》学习笔记九
<Microsoft SQL Server 2008 MDX Step by Step>学习笔记九:导航结构层次 SQL Server 2008中SQL应用系列及BI笔记系列--目录索 ...
随机推荐
- Spring JdbcTemplate 和 NamedParameterJdbcTemplate 使用
1.简单介绍 DAO层 的一般使用常见的是MyBatis 和 Hibernate,但是Hibernate是重量级的,而且学习成本较高,Mybatis 需要编写大量配置文件及接口文件,对于简单的项目应用 ...
- RSA使用
RSA使用 今天在跟同事一起调试TCP通讯的时候,在RSA私钥解密这块,着实让我费了一番心思. 流程大致是这样的,终端登录的时候使用固定的des密码加密数据发送,平台接收后确认登录信息后,会返回一个字 ...
- 学习WPF-1
学习WPF-1 最近到新公司,需要使用WPF来做界面开发,我原先是使用WinForm来做界面开发的,所以对于现在使用WPF来开发,需要先学习一段时间了,考核的内容目前也还没定下来做什么, 但终归是使用 ...
- 官宣!VS Code Python 全新功能在 PyCon China 全球首发!
北京时间 2019 年 9 月 21 日,PyCon China 2019 在上海举行. 在下午的演讲中,来自微软开发工具事业部的资深研发工程师 在演讲中,我们看到了 Azure Notebook 与 ...
- 从零开始学MySQL(一)
如果您浏览过许多IT类的招聘职位,那么掌握数据库技能的重要性便不言自明了.因JAVA常常与MySQL所挂钩,因此兴起了写博客记载学习的念头,盼与君共勉.然,在进行MySQL语法的学习之前,我们无不面临 ...
- ui自动化之selenium操作(一)环境搭建
1. python安装: 前面步骤可以看到,这里就不赘述了(我们在这里安装的是python3) 2. selenium安装: 前面我们都已经安装好pip了,所以这里咱们直接进入到python安装路径的 ...
- RSA前端加密
昨天做了登陆模块,接触了md5&RSA加密.有点意思,talk is cheap,show me the code! 前端加密 为什么要加密 前端加密的方式 后台如何解密 1 为什么要加密? ...
- 生成不带版本的jar包 不影响deploy
1 How to build maven project without version? 工程pom中增加 <project> ... <build> ... <fin ...
- 连接gitlab
https://www.cnblogs.com/mengyu/p/7761340.html 一.PyCharm配置Git的环境 1.PyCharm 连接Git首先需要本机安装Git软件; 2.PyCh ...
- 微信小程序横向滚动正确姿势
<1>xml文件 <view> <scroll-view scroll-x class="scroll-header"> <view cl ...