day 9 深浅拷贝
浅copy
现有数据
data = {
"name":"alex",
"age":18,
"scores":{
"语文":130,
"数学":60,
"英语":98,
}
}
d2 = data
data["age"] = 20
print(d2)
你说d2打印的值里,age是18,还是20?
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
为何是20呢? 因为d2=data相当于只是拿到了data的内存地址,但data里的每个k,v都是有单独的内存的地址的。d2,data会一直共享这个dict里的数据,不会出现像之前字符串a=1,b=a, a=2, b依然等于1的情况。

如果我确实想复制一份完成的dict数据怎么办呢?
可以用浅copy语法
data = {
"name":"alex",
"age":18,
"scores":{
"语文":130,
"数学":60,
"英语":98,
}
}
d2 = data.copy()
data["age"] = 20
print(d2)
print(data)
输出
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 60, '英语': 98}}
这样就相当于是2份独立数据了, 但是为什么这个语法叫做浅copy呢? 你改一下score里的值 就知道了。
data = {
"name":"alex",
"age":18,
"scores":{
"语文":130,
"数学":60,
"英语":98,
}
}
d2 = data.copy()
data["age"] = 20
data["scores"]["数学"] = 77
print(d2)
print(data)
看输出 , 很神奇,两个Dict里age的值是独立的,但score字典里的分数值貌似是共享的
{'name': 'alex', 'age': 18, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
{'name': 'alex', 'age': 20, 'scores': {'语文': 130, '数学': 77, '英语': 98}}
因为浅copy会仅复制dict的第一层数据,更深层的scores下面的值依然是共享一份。

注意图中的2个dict中的name都是alex,内存地址也一样,在没改前,两个name都确实指向同一个内存地址,但只要改任何一个的值,内存地址都会变更, 如age这个key一样。
深copy
若你想彻底使上面的2个dict完全独立,无论有多少层数据。那就要用python工具包里的一个工具了,
最后,这东西有什么用呢? 坦白讲,以后开发中多数情况下你用不到,但是你有要知道有这个知识点,说不定哪天有个需求就要求你必须确保你的2个复制出来的dict,list必须是独立的了。
day 9 深浅拷贝的更多相关文章
- Python 从零学起(纯基础) 笔记 之 深浅拷贝
深浅拷贝 1. import copy#浅拷贝copy.copy()#深拷贝copy.deepcopy()#赋值 = 2. 对于数字和字符串而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个 ...
- python——赋值与深浅拷贝
初学编程的小伙伴都会对于深浅拷贝的用法有些疑问,今天我们就结合python变量存储的特性从内存的角度来谈一谈赋值和深浅拷贝~~~ 预备知识一——python的变量及其存储 在详细的了解python中赋 ...
- Python中的深浅拷贝
1.什么是深浅拷贝? python中一切皆对象,python中的数字.字符串.元组等,如果存放在了内存中,这部分内存里面的内容是不会改变的,但是也有情况,内存中存放了可变对象,比如说列表和字典,他们的 ...
- Python-Day3知识点——深浅拷贝、函数基本定义、内置函数
一.深浅拷贝 import copy #浅拷贝 n1={'k1':'wu','k2':123,'k3':['carl',852]} n2=n1 n3=copy.copy(n1) print(id(n1 ...
- python基础知识5——赋值与深浅拷贝——整数和字符串,列表元组字典
深浅copy 一.数字和字符串 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 import copy 2 # ######### 数字.字符串 #### ...
- python 学习笔记5(深浅拷贝与集合)
拷贝 我们已经详细了解了变量赋值的过程.对于复杂的数据结构来说,赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享. 然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个 ...
- Python开发【第二章】:Python深浅拷贝剖析
Python深浅拷贝剖析 Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,就可能产生意外的结果. 下面本文就通过简单的例子介绍一下这些概念之间的差别. 一.对象赋值 ...
- python基础(三元运算+深浅拷贝+函数参数)
三元运算 三元运算,又称三目运算,主要作用是减少代码量,是对简单的条件语句的缩写. 书写格式: result = 值1 if 条件 else 值2 即如果条件成立,则将值1赋给result变量,如果不 ...
- @proprety数组字典字符串用copy和strong区别(深浅拷贝)
//// @proprety数组字典字符串用copy和strong区别(深浅拷贝).h// IOS笔记//// /* _proprety________copy_strong_________h ...
- Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数
一.上节课的重点回顾: 1.类名加括号其实就是执行类的__init__方法: 2.int a.创建方式 n1 = 123 #根据int类创建了一个对象 n2 = int(123) #根据int类创建一 ...
随机推荐
- 【Java并发基础】利用面向对象的思想写好并发程序
前言 下面简单总结学习Java并发的笔记,关于如何利用面向对象思想写好并发程序的建议.面向对象的思想和并发编程属于两个领域,但是在Java中这两个领域却可以融合到一起.在Java语言中,面向对象编程的 ...
- 如何快速安装kafka-manager
1.下载kafka-manager git clone https://github.com/yahoo/kafka-manager.git 2.配置sbt镜像仓库 因为kafka-manager是雅 ...
- 1757: 成绩稳定的学生(武汉科技大学结构体oj)
#include<stdio.h>#include<string.h>struct student{ long no; char name[9]; int ch[20]; in ...
- 快乐编程大本营【java语言训练班】第5课: java的数组编程
快乐编程大本营[java语言训练班]第5课: java的数组编程 第1节. 声明数组变量 第2节. 创建数组对象 第3节. 访问数组元素 第4节. 修改数组元素 第5节. 多维数组 学习地址如下:ht ...
- 实验18:HDLC和PPP
实验15-1:HDLC 和PPP 封装 Ø 实验目的通过本实验,读者可以掌握如下技能:(1) 串行链路上的封装概念(2) HDLC 封装(3) PPP 封装 Ø 实验拓扑 实验步骤n ...
- Affinity Propagation
1. 调用方法: AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=N ...
- ReLU函数
Rectifier(neural networks) 在人工神经网络中,rectfier(整流器,校正器)是一个激活函数,它的定义是:参数中为正的部分. , 其中,x是神经元的输入.这也被称为ramp ...
- 你知道EasyX吗
关于C++控制台上的图形界面,你知道一个东西叫做EasyX吗? 作为一个退役的OI选手(WTF?\(3^2-3^1\)年级退役?),在退役之后总想找点事情做. 开发个游戏?(我只会控制台) 学下人工智 ...
- python上获得随机字符
import random import string print(string.ascii_letters) # 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNO ...
- jq根据table的tr行数动态删除相应的行
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...