赋值语句 变量的地址相关 : RUNOOB python练习题7

用来练手的python 练习题,原链接 : python练习实例7

练习实例7非常的简单也有意思。题干 : 将一个列表的数据复制到另一个列表中。

完成这个操作的代码非常简单,即使是我这样的初学者应该也是一语道破,赋值语句嘛。但这里我们就列举出几种不同的赋值方法,其背后的逻辑和细节其实是大不相同的。

下面放出源代码,首先当然是使用我们的赋值语句进行数据复制了,这里我使用的是numpy array代替list :

import numpy as np
a = np.array([1,2,3,4,5])
c = a
print(c)
print(a)
print(c is a)
print(id(c))
print(id(a))

输出结果如下 :
在这里插入图片描述
我们不难发现,当我们使用赋值语句 “=” 直接对numpy 矩阵进行复制时,实际我们是让c与a指向了同一块内存。a和c不仅数值一致,他们在内存中对应的地址也是一样的。那么我们对a进行一些操作,看看会有什么发生呢:

a -= 1
print(a)
print(c)
print(c is a)
print(id(a))
print(id(c))

这里我们对a进行自增(自增和自减操作一样),输出结果如下:
在这里插入图片描述
我们发现,当对变量进行自增或自减操作时,变量的地址并没有改变,相应的,两个指向同一内存块的变量a和c的值当然同时改变了。

那么如果我们对a进行减法运算会发生什么呢,代码如下:

a = a - 1
print(a)
print(c)
print(c is a)
print(id(a))
print(id(c))

这次我们对矩阵a进行减法运算,输出结果如下:
在这里插入图片描述
不难发现,当我们运算a=a−1a =a -1a=a1时,python为新的变量a重新分配了内存,自然而然地,a矩阵和c矩阵就不再对应同一个内存地址了。

我们尝试了使用赋值语句进行复制,那么如果我们使用np.copy()方法会怎么样呢?
源代码如下:

f = np.copy(a)
print(f)
print(a)
print(a is f)
print(id(a))
print(id(f))

输出结果如下:
在这里插入图片描述
我们发现,使用copy方法进行复制时,仅仅只是对数值的复制,Python会为变量重新分配内存,而不会像赋值语句一样使两个变量公用同一块内存空间

使用下述代码也可以实现copy一样的作用,只复制数值,而不改变变量的地址:

g = a[:]
print(g)
print(a)
print(a is g)
print(id(a))
print(id(g))

输出结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386959.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web标准的概念及组成

一周更新两个或三个关于web前端的知识点,欢迎感兴趣的小伙伴们一起学习讨论1、WEB标准是网页制作的标准,它不是一个标准,它是根据网页的不同组成部分生成的一系列标准。这些标准大部分由W3C起草发布,也有部分标准由ECMA起草发布。…

Fiddler简介及安装和HTTPS的解决

Fiddler简介: 一个很强大的抓包工具,类似Charles 1.安装: Filddler官网:点击打开链接 我安装的是filddler4:点击打开链接 直接下载文件,然后一路下一步就可以了 1.下载文件: 2.安装文件一…

RUNOOB python练习题8 numpy矩阵的索引及遍历

用来练手的python 练习题,原链接 : python练习实例8 题干: 输出 9*9 乘法口诀表。 import numpy as nptable np.zeros((9,9)) for i in range(table.shape[0]):for j in range(table.shape[1]):table[i][j] (i1) * (j1)# 查询九九乘法表 def affichage_table(a,…

ddt源码修改:HtmlTestRunner报告依据接口名显示用例名字

做接口测试,使用unittestddtexcel ,使用HtmlTetstRunner来生成测试用例。 查看报告的时候 用例名称都是 test_api_1 、test_api_2 、test_api_3 的显示 ,看的不爽,也不明确,如果是test_api_登陆成功 、 test_api_密码错误 …

Fiddler抓取https设置及其原理

Fiddler抓取https设置及其原理 2018-02-02 目录 1 HTTPS握手过程 2 Fiddler抓取HTTPS过程 3 Fiddler抓取HTTPS设置参考 数字签名是什么? 1 HTTPS握手过程 HTTPS 并非是应用层的一种新协议。只是 HTTP 通信接口部分用 SSL (安全套接字层)和…

RUNOOB python练习题10

用来练手的python 练习题,原链接 : python练习实例9 题干 : 暂停两秒输出,并格式化当前时间。 import time,datetimeTIME datetime.datetime.now() print(TIME.strftime("%Y.%m.%d %H-%M-%S")) time.sleep(2) TIME datetime.datetime.now(…

HTTPS连接过程以及中间人攻击劫持

HTTPS连接过程以及中间人攻击劫持 目前很多应用都用webview加载H5页面,如果服务端采用的是可信CA颁发的证书,在 webView.setWebViewClient(webviewClient) 时重载 WebViewClient的onReceivedSslError() ,如果出现证书错误,直接调…

RUNOOB python练习题12 找素数问题

用来练手的python 练习题,原链接 : python练习实例12 题干 : 判断101-200之间有多少个素数,并输出所有素数 源代码如下: import numpy as np bound np.arange(101,201,1) result np.array([]) for k in bound:for i in range(k):# 如果k存在不是1或…

Linux: centOS6.5 RabbitMQ

在大多数大公司,像应用服务器软件的安装、部署都是运维的事情,其实自己去尝试部署一下,也是有收获的。 有机会正好尝试了Linux下的rabbitMq安装过程,做了记录,希望有用到的人可以做下参考。 安装环境: Li…

RUNOOB python练习题13 水仙花数

用来练手的python 练习题其十三,原链接 : python练习实例13 题干 : 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",…

OsharpNS轻量级.net core快速开发框架简明入门教程-代码生成器的使用

OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. OsharpNS.Swagger使用实例(登录和授权) 1.4. Angular6的前端项目启动Osharp代码生成器的使用 2.1 生成器的使用 2.2 生…

RUNOOB python练习题 14

用来练手的python 练习题其十四,原链接 : python练习实例14 题干 : 将一个正整数分解质因数。例如:输入90,打印出90233*5。 拿到题目,我们就可以看出,首先我们需要一个函数来判断某一正整数是否为质数,然后还需要一个…

RUNOOB python练习题17

用来练手的python 练习题其十三,原链接 : python练习实例17 题干 : 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 这个例题让我回忆起了远古的记忆,python str类的 isalpha,isspace,isdigit方法。这些方法通过比较ASC…

Centos7下使用ELK(Elasticsearch + Logstash + Kibana)搭建日志集中分析平台

Centos7下使用ELK(Elasticsearch Logstash Kibana)搭建日志集中分析平台 日志监控和分析在保障业务稳定运行时,起到了很重要的作用,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器&#xf…

叠数的加法与字符串 RUNOOB python练习题 18

用来练手的python 练习题其十八,原链接 : python练习实例18 题干: 求saaaaaaaaaaaa…a的值,其中a是一个数字。例如222222222222222(此时共有5个数相加),几个数相加由键盘控制 这种类型的叠数相加,让我不禁联想到了python中&…

RUNOOB python练习题19 找出1000以内的所有完数

用来练手的python 练习题,原链接 : python练习实例19 题干: 一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如61+2+3.编程找出1000以内的所有完数。 首先我们要理解,什么是完数。根据百度词条&am…

RUNOOB python练习题 23 使用*号输出菱形

用来练手的python练习题,原题链接:python练习实例23 题干: 这个题目还是利用python字符串的乘法等性质,通过循环打印出我们想要的图形。 源代码如下: for i in range(4):character " " * (3-i) "*" * ((i1)*2-1)print(charact…

RUNOOB python练习题24 斐波那契数列的衍生问题

用来练手的python练习题,原题链接 : python练习实例24 题干: 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。 拿到题目观察数列,我们不难发现,…

企业邮箱服务器如何设置?

企业邮箱是邮箱服务商面向企业客户开发的邮箱系统,采取管理员机制,企业使用自己的官网域名作为邮箱地址的后缀,由管理员为员工创建邮箱空间,并分配权限。在员工办公的场景中,为了收发邮件方便,一般的都会使…

elasticsearch6.2.4 与logstash与kibana版本6.2.4搭建同步使用

解压 tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz 创建快捷方式 ln -s kibana-6.2.4-linux-x86_64 kibana /app/elasticsearch/kibana/bin #端口 server.port: 5601 #主机 server.host: "10.118.182.85" #es的地址 elasticsearch.url: http://10.118.182…