用来练手的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相关推荐

  1. 数组元素前移后移 RUNOOB python练习题 68

    用来练手的python练习题,原题链接: python练习实例68 题干: 有 n 个整数,使其前面各数顺序向后移 m 个位置,最后 m 个数变成最前面的 m 个数 代码如下: import nump ...

  2. 符号 RUNOOB python练习题 51

    用来练手的python练习题,原题链接: python练习实例51 python中的 & 和 | 使用过程中,变量类型不同,这两个符号的作用也不同. 1. 对于数字变量,&\& ...

  3. lambda函数 RUNOOB python练习题49

    用来练手的python练习题,原题链接python练习实例49 该练习题主要是关于lambda函数的使用方法,本文就python中的lambda函数做出一点总结. 1. lambda函数的定义与调用 ...

  4. RUNOOB python练习题47 交换两个变量值

    用来练手的python练习题,原题链接: python练习实例47 题干: 两个变量值互换 在C语言C++中我们要构造一个能交换两个变量值的函数很方便,我们可以使用指针,或者C++中的引用.那么在没有 ...

  5. RUNOOB python练习题37 对一个序列的数进行排序

    用来练手的Python练习题,原题链接: python练习实例37 题干: 对10个数进行排序 在我们使用Numpy模块时,这个问题是非常简单的,下面放出降序排列和升序排列的代码: 升序排列 impo ...

  6. RUNOOB python练习题1

    用来练手的python 练习题,原链接 : python练习实例1 题干 : 有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? import numpy as np c ...

  7. 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 ...

  8. python random随机数 RUNOOB python练习题50

    用来练手的python练习题,原题链接: python练习实例50. 该练习题主要包含了random模块随机数的应用,下面给出几个常用的模块内函数. 1. 生成浮点型随机小数 最简单的,就是用rand ...

  9. RUNOOB python练习题44

    用来练手的python练习题,原题链接:python练习实例44 题干: 两个 3 行 3 列的矩阵,实现其对应位置的数据相加,并返回一个新矩阵 使用基本的List类写起来就比较麻烦,需要初始化一个3 ...

最新文章

  1. C语言常用排序方法大全
  2. html设置box设置长度自适应,CSS实现宽度自适应宽高16:9的矩形的示例
  3. 【STM32】FreeRTOS 系统内核控制函数
  4. VC Ws2_32.lib
  5. Spring MVC访问不到静态资源
  6. 迪士尼手机官方专卖东家京破产
  7. mysql优化之query优化
  8. spinnaker_为什么Spinnaker对CI / CD至关重要
  9. android 手机 与 python服务器_python服务器与android客户端socket通信实例
  10. 解析几何 —— 椭圆
  11. 使用MongoDb连接数据库服务器
  12. 电梯控制系统设计(PLC及组态)
  13. linux编辑乱码华为光猫,华为光猫修改双模、SN序号、MAC地址方法
  14. 浅谈一下位操作符吧---我带你深入了解计算机内的数字(暂时限定整数)
  15. 如何判断等保测评机构有资质?符合要求?
  16. 关于计算机的合成新英语词,计算机英语专业词汇的构词法
  17. hdoj 4288coder cf 85d Sum of Medians
  18. Markdown 教程: 1 数学公式和特殊符号
  19. AutoFill 自动填充生长动画插件
  20. 软件开发公司的管理方式(上)

热门文章

  1. Java里面的几种路径的区别
  2. ffmepg 命令提取音视频数据
  3. 远控免杀5---Veil免杀
  4. uva 11012——Cosmic Cabbages
  5. hdu 2112 ——HDU Today
  6. 友元函数 友元类 友元成员函数
  7. Linux命令【二】终端+Vim
  8. IO 多路复用之poll总结
  9. Java集合(一):Java集合概述
  10. 从新手到Flutter架构师,一篇就够!附赠课程+题库