python开发中两个list之间传值示例
程序员文章站
2022-03-19 09:14:39
由于改代码因为这个问题卡了半个小时特此记录首先对于一个单层的列表赋值如下,可以看见,如果直接使用 = 的话。其中一个变换便会引起另外一个变换,这时因为这两个list被python解释的时候使用的相同的...
由于改代码因为这个问题卡了半个小时特此记录
首先对于一个单层的列表
赋值如下,可以看见,如果直接使用 = 的话。其中一个变换便会引起另外一个变换,这时因为这两个list被python解释的时候使用的相同的地址,如下面输出的 id()中的内容,所以此时如果想让一个列表接收到另外一个列表的值,并且在接收到值后不会因为其中任意一个值的改变而改变,这时候就需要使用copy方法,这里可以解释成,当使用了copy方法后,python单独创建了找个一个内存区的地址放了新的那个值。
a = [ 1,2,3] b = a a[0] = a[0] +1 print(a) print(b) print(id(a[0])) print(id(b[0])) print("*"*20) a1 = [5,6,7] b1 = a1.copy() a1[0] = a1[0] + 1 print(a1) print(b1) print(id(a1[0])) print(id(b1[0]))
输出
[2, 2, 3] [2, 2, 3] 140729246982592 140729246982592 ******************** [6, 6, 7] [5, 6, 7] 140729246982720 140729246982688
对于多层列表
这也是我今天被坑的地方,注意到了第一层,但却没有注意到第二层,如下可以看见,虽然我们使用了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] + 1 print(a) print(b) print(id(a[4]))
输出
打印数组地址: 1938878979528 1938879043976 **************************************** 打印内层元素地址: 1938877731208 1938877731208 140729246982560 140729246982560 **************************************** [[1, 2, 4], [4, 5, 8], [], [], 4] [[1, 2, 4], [4, 5, 8], [], []] 140729246982656
所以赋值操作应该为:
import copy a = [[1,2,4],[3,5,8],[],[]] # b = a.copy() b = copy.deepcopy(a)
即使用 copy.deepcopy 进行赋值操作,这时候当对a的内层元素进行操作之后,b不会跟着改变,
不过这里需要注意的是(不得不说这个设计节省内存真的很精妙),如果不更改a和b内部元素的值的话,那么a和b内部元素的值他们的地址还是相同的,只有在一方更改了自身地址内的值的时候,地址才会更改。
import copy a = [[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] + 2 print(id(b[1][0]))
输出
打印数组地址: 1696261290248 1696261352200 **************************************** 打印内层元素地址: 1696257692040 1694368707272 00000000000000000000000000000000000000000000000000 140729133343136 140729133343136 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 3 3 140729133343200 140729133343200 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 4 3 140729133343232 140729133343200 1010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010 140729133343264
以上就是python开发中两个list之间传值示例的详细内容,更多关于python中list列表两表传值的资料请关注其它相关文章!