首页 技术 正文
技术 2022年11月18日
0 收藏 482 点赞 4,233 浏览 981 个字

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

学过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开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905