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笔记系列--目录索 ...
随机推荐
- 阿里云安装filezilla
1.连接服务器 ssh 或者 远程连接 到服务器: 2.安装相应软件 安装EPEL,EPEL是yum的一个软件源,里面包含了许多基本源里没有的软件: yum -y install epel-relea ...
- 反向传播算法-损失函数&激活函数
在监督学习中,传统的机器学习算法优化过程是采用一个合适的损失函数度量训练样本输出损失,对损失函数进行优化求最小化的极值,相应一系列线性系数矩阵W,偏置向量b即为我们的最终结果.在DNN中,损失函数优化 ...
- 弹出ifream
top.$.jBox("iframe:"+'${ctx}/synopsis/hmlwxSynopsis/addItem', {title: "添加作品",w ...
- mac osx sed 命令
$ sed -i "s/devicedemo/device/g" `grep devicedemo -rl ./` sed: 1: ".//.coveragerc&quo ...
- 使用 supervisor 管理 Celery 服务
使用 supervisor 管理 Celery 服务 Celery 后台运行 如果我们想让celery worker运行在后台而不是终端上,在后台以守护进程的方式运行,我们可以使用supervisor ...
- DSP学习资料:基于6U VPX的 XC7VX690T+C6678的双FMC接口雷达通信处理板
基于6U VPX的 XC7VX690T+C6678的双FMC接口雷达通信处理板 一.板卡概述 高性能VPX信号处理板基于标准6U VPX架构,提供两个标准FMC插槽,适用于电子对抗或雷达信号等领域 ...
- nginx的高级配置和优化
Nginx的高级配置(优化) 针对内核的配置优化 1)net.core.netdev_max_backlog 表示当网络接口接收数据包的速度大于内核处理这些包块的时候,允许发送到队列的数据包的最大数目 ...
- 校内题目T2695 桶哥的问题——吃桶
同T2一样外校蒟蒻可能没看过: 题目描述: 题目背景 @桶哥 桶哥的桶没有送完. 题目描述 桶哥的桶没有送完,他还有n个桶.他决定把这些桶吃掉.他的每一个桶两个属性:种类aia_iai和美味值bib ...
- java8 新特性,stream的应用
https://www.cnblogs.com/fengli9998/p/9002377.html http://www.runoob.com/java/java8-optional-class.ht ...
- Spring Boot 整合 AOP
一.示例 1.依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...