您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python开发中两个list之间传值示例

51自学网 2021-10-30 22:14:01
  python
这篇教程python开发中两个list之间传值示例写得很实用,希望能帮到您。

由于改代码因为这个问题卡了半个小时特此记录

首先对于一个单层的列表

赋值如下,可以看见,如果直接使用 = 的话。其中一个变换便会引起另外一个变换,这时因为这两个list被python解释的时候使用的相同的地址,如下面输出的 id()中的内容,所以此时如果想让一个列表接收到另外一个列表的值,并且在接收到值后不会因为其中任意一个值的改变而改变,这时候就需要使用copy方法,这里可以解释成,当使用了copy方法后,python单独创建了找个一个内存区的地址放了新的那个值。

a = [ 1,2,3]b = aa[0] = a[0] +1print(a)print(b)print(id(a[0]))print(id(b[0]))print("*"*20)a1 = [5,6,7]b1 = a1.copy()a1[0] = a1[0] + 1print(a1)print(b1)print(id(a1[0]))print(id(b1[0]))

输出

[2, 2, 3][2, 2, 3]140729246982592140729246982592********************[6, 6, 7][5, 6, 7]140729246982720140729246982688

对于多层列表

这也是我今天被坑的地方,注意到了第一层,但却没有注意到第二层,如下可以看见,虽然我们使用了copy方法,但是内层[]则没有

a = [[1,2,4],[3,5,8],[],[]]b = a.copy()print("打印数组地址:")print(id(a))print(id(b))print("*"*40)print("打印内层元素地址:")print(id(a[0]))print(id(b[0]))print(id(a[0][0]))print(id(b[0][0]))print("*"*40)a.append(4)a[1][0] = a[1][0] + 1print(a)print(b)print(id(a[4]))

输出

打印数组地址:19388789795281938879043976****************************************打印内层元素地址:19388777312081938877731208140729246982560140729246982560****************************************[[1, 2, 4], [4, 5, 8], [], [], 4][[1, 2, 4], [4, 5, 8], [], []]140729246982656

在这里插入图片描述

所以赋值操作应该为:

import copya = [[1,2,4],[3,5,8],[],[]]# b = a.copy()b =  copy.deepcopy(a)

即使用 copy.deepcopy 进行赋值操作,这时候当对a的内层元素进行操作之后,b不会跟着改变,
不过这里需要注意的是(不得不说这个设计节省内存真的很精妙),如果不更改a和b内部元素的值的话,那么a和b内部元素的值他们的地址还是相同的,只有在一方更改了自身地址内的值的时候,地址才会更改。

import copya = [[1,2,4],[3,5,8],[],[]]# b = a.copy()b =  copy.deepcopy(a)print("打印数组地址:")print(id(a))print(id(b))print("*"*40)print("打印内层元素地址:")print(id(a[0]))print(id(b[0]))print("0"*50)print(id(a[0][0]))print(id(b[0][0]))print("10"*50)print("/n")print(a[1][0])print(b[1][0])print(id(a[1][0]))print(id(b[1][0]))print("10"*50)print("/n")# print("*"*40)# a.append(4)a[1][0] = a[1][0] + 1## print(a)# print(b)# print(id(a[4]))# print("/n")print("10"*50)print(a[1][0])print(b[1][0])print(id(a[1][0]))print(id(b[1][0]))print("10"*50)print("/n")b[1][0] = b[1][0] + 2print(id(b[1][0]))

输出

打印数组地址:16962612902481696261352200****************************************打印内层元素地址:169625769204016943687072720000000000000000000000000000000000000000000000000014072913334313614072913334313610101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010103314072913334320014072913334320010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010431407291333432321407291333432001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010140729133343264

以上就是python开发中两个list之间传值示例的详细内容,更多关于python中list列表两表传值的资料请关注51zixue.net其它相关文章!


将Python脚本打包成MACOSAPP程序过程
Django使用celery异步发送短信验证码代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。