我们都知道 所谓变量就是就是在空间中开辟一块内存空间。来存放东西的

学过c语言的都知道而数组也是有内存地址的

我们如何来查看内存地址呢?id()这函数就来了

x = 5
print(id(x))

如此一来我们就可以查看x的内存地址了他的内存地址是

1940307088

首先我们来看一个现象

我们把数组赋值给一个变量a 然后在把a赋值给b 在来改变a的值 看看b 是否会发生变化呢?

a = [1,2,3]
b = a
a[0] = 11
print(b)

得出的结果是

[11, 2, 3]

很显然发生了变化,这是什么原因造成的呢?最好的办法就是查一下他们的id

print(id(a) == id(b))

结果是 True

很显然他们指向了同一块内存地址, 为什么会出现这种情况呢?我们在学c语言的是时候啊 知道数组的地址就是数组的首地址,所以我们可以直接赋值,

但是内存地址没有发生改变。为了解决这一情况,我们可以采用copy的方法来将数据拷贝出来

首先 我们import 出copy的库来

import copy
a = [1,2,3]
b = copy.copy(a)
a[0] = 11
print(b)
print(id(a) == id(b))

我们看一下结果

[1, 2, 3]
False

可以看出我们地址不相同了 现在改变数组里面的元素也与b无关了

哪我们升级一下改变一下难度 我们把a 变成

a = [1,2,[1,2,3]]

import copy
a = [1,2,[1,2,3]]
b = copy.copy(a)
a[2][0] = 11
print(b)

结果是

[1, 2, [11, 2, 3]]

我擦居然还是变了,这是怎么回事?你发现只能copy第一层 于是你不甘心你又加了字典

import copy
a = [1,2,[1,2,3],{'wocao':123456}]
b = copy.copy(a)
a[3]['wocao'] = 11
print(b)

结果是

[1, 2, [1, 2, 3], {'wocao': 11}]

于是你恍然大悟啊。。。。原来copy只能浅浅的copy一层啊!!!

还好你上课听讲,听见了老师说了深深的copy,于是你又拿出来试试

import copy
a = [1,2,[1,2,3],{'wocao':123456}]
b = copy.deepcopy(a)
a[3]['wocao'] = 11
a[2][1] = 11
print(b)

得出来

[1, 2, [1, 2, 3], {'wocao': 123456}]

好家伙原来是这么回事啊

												

python之深浅copy与id的更多相关文章

  1. Python的深浅copy详解

    Python的深浅copy详解 目录 Python的深浅copy详解 一.浅copy的原理 1.1 浅copy的定义 1.2 浅copy的方法 二.深copy的原理 2.1 深copy的定义 2.2 ...

  2. Python的深浅copy

    27.简述Python的深浅拷贝以及应用场景? 深浅拷贝的原理 深浅拷贝用法来自copy模块. 导入模块:import copy 浅拷贝:copy.copy 深拷贝:copy.deepcopy 字面理 ...

  3. Python 集合 深浅copy

    一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...

  4. python集合深浅copy

    一,集合. 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. ...

  5. Python之深浅copy与字符编码

    一.深浅copy 1. 首先看赋值运算 l1 = [1,2,3,['barry','alex']] l2 = l1 l1[0] = 111 print(l1) # [111, 2, 3, ['barr ...

  6. python之深浅copy

    深浅copy 1.赋值运算 a = [1, 2, 3] b = a a.append(666) print(b) #output:[1, 2, 3, 666] 对于赋值运算来说,a与b指向的是同一个内 ...

  7. 【python】-- 深浅copy、集合

    深浅copy 1.数字.字符串的copy: 赋值(=).浅拷贝(copy)和深拷贝(deepcopy)其实都一样,因为它们永远指向同一个内存地址: >>> import copy & ...

  8. python基础--深浅copy(重点)

    在此申明一下,博客参照了https://www.cnblogs.com/jin-xin/,自己做了部分的改动 深浅copy(重点) 先问问大家,什么是拷贝?拷贝是音译的词,其实他是从copy这个英文单 ...

  9. day python calss08 深浅copy

    一  join (格式:   . join) 遍历列表把列表中的每一项用指定符号进行拼接.(把列表转成字符串0 # lst = ["汪峰", "吴君如", &q ...

随机推荐

  1. 安装clion

    转战c语言,首先搞定编辑器,之前用的pycharm所以就直接用clion了,但是装完不能直接用参考 https://www.cnblogs.com/lyc94620/p/9581786.html 所以 ...

  2. day25 Pyhton学习 约束和异常处理

    一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...

  3. day18 Pyhton学习 匿名函数

    匿名函数 别称: lambda表达式 函数,没有名字 def wahaha(n):#wahaha return n**2 print(wahaha.__name__) qqxing = lambda ...

  4. selenium环境配置学习笔记

    一 为什么进行自动化测试 缩短测试周期 避免人为出错 测试信息存储 轻易获取覆盖率 二 web/ui自动化条件和适用范围 手工测试已经完成,后期在不影响进度的前提下逐渐实现自动化 项目周期长,重复性工 ...

  5. C++ Primer第5版 第三章课后练习

    练习3.1 #include <iostream> using namespace std; int main() { int sum = 0, val = 50; while (val ...

  6. java axis调用带有soap头(soapheader)的.net webservice

    使用axis调用.net带soapheader的webservice是如何实现的,现在贴出代码 <?xml version="1.0" encoding="utf- ...

  7. Anderson《空气动力学基础》5th读书笔记 第4记——黏性流动入门

    目录 一.边界层的概念 二.边界层的产生原因 三.剪切力的公式 四.温度分布情况 五.雷诺数与层流.湍流 一.边界层的概念 我们先来介绍边界层的概念(边界层正是黏性流动的产物),边界层是紧挨物体的薄层 ...

  8. 使用ModelForm校验数据唯一性

    在设计模型类的时候,将指定字段设置unique=true属性,可以保证该字段在数据库中的唯一性. 使用ModelForm可以将指定模型类快速生成表单元素.在提交数据后,使用is_valid()校验时, ...

  9. git学习(一) 入门级命令

    git 本地操作 调出Git的帮助文档 git --help 查看某个具体命令的帮助文档 git +命令 --help 查看git的版本 git --version 生成空的本地仓库 git init ...

  10. revel run报错 undefined: sys call.SIGUSR2"

    revel run报错,报错信息为 o Compilation Error (in ..\\..\\revel\\server_adapter_go.go:135): undefined: sysca ...