赋值语句 变量的地址相关 : 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=a−1时,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))
输出结果:
赋值语句 变量的地址相关 : RUNOOB python练习题7相关推荐
- 数组元素前移后移 RUNOOB python练习题 68
用来练手的python练习题,原题链接: python练习实例68 题干: 有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数 代码如下: import nump ...
- 符号 RUNOOB python练习题 51
用来练手的python练习题,原题链接: python练习实例51 python中的 & 和 | 使用过程中,变量类型不同,这两个符号的作用也不同. 1. 对于数字变量,&\& ...
- lambda函数 RUNOOB python练习题49
用来练手的python练习题,原题链接python练习实例49 该练习题主要是关于lambda函数的使用方法,本文就python中的lambda函数做出一点总结. 1. lambda函数的定义与调用 ...
- RUNOOB python练习题47 交换两个变量值
用来练手的python练习题,原题链接: python练习实例47 题干: 两个变量值互换 在C语言C++中我们要构造一个能交换两个变量值的函数很方便,我们可以使用指针,或者C++中的引用.那么在没有 ...
- RUNOOB python练习题37 对一个序列的数进行排序
用来练手的Python练习题,原题链接: python练习实例37 题干: 对10个数进行排序 在我们使用Numpy模块时,这个问题是非常简单的,下面放出降序排列和升序排列的代码: 升序排列 impo ...
- RUNOOB python练习题1
用来练手的python 练习题,原链接 : python练习实例1 题干 : 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? import numpy as np c ...
- Python打印杨辉三角形 RUNOOB python练习题61
用来练手的python练习题,原题链接: python练习实例61 题干: 打印出杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 ...
- python random随机数 RUNOOB python练习题50
用来练手的python练习题,原题链接: python练习实例50. 该练习题主要包含了random模块随机数的应用,下面给出几个常用的模块内函数. 1. 生成浮点型随机小数 最简单的,就是用rand ...
- RUNOOB python练习题44
用来练手的python练习题,原题链接:python练习实例44 题干: 两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵 使用基本的List类写起来就比较麻烦,需要初始化一个3 ...
最新文章
- C语言常用排序方法大全
- html设置box设置长度自适应,CSS实现宽度自适应宽高16:9的矩形的示例
- 【STM32】FreeRTOS 系统内核控制函数
- VC Ws2_32.lib
- Spring MVC访问不到静态资源
- 迪士尼手机官方专卖东家京破产
- mysql优化之query优化
- spinnaker_为什么Spinnaker对CI / CD至关重要
- android 手机 与 python服务器_python服务器与android客户端socket通信实例
- 解析几何 —— 椭圆
- 使用MongoDb连接数据库服务器
- 电梯控制系统设计(PLC及组态)
- linux编辑乱码华为光猫,华为光猫修改双模、SN序号、MAC地址方法
- 浅谈一下位操作符吧---我带你深入了解计算机内的数字(暂时限定整数)
- 如何判断等保测评机构有资质?符合要求?
- 关于计算机的合成新英语词,计算机英语专业词汇的构词法
- hdoj 4288coder cf 85d Sum of Medians
- Markdown 教程: 1 数学公式和特殊符号
- AutoFill 自动填充生长动画插件
- 软件开发公司的管理方式(上)