• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python开发中两个list之间传值示例
    POST TIME:2021-10-18 12:59

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

    首先对于一个单层的列表

    赋值如下,可以看见,如果直接使用 = 的话。其中一个变换便会引起另外一个变换,这时因为这两个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列表两表传值的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 详解python函数传参传递dict/list/set等类型的问题
    • Python参数传递机制传值和传引用原理详解
    • Python 列表(List)操作方法详解
    • Python中list列表的一些进阶使用方法介绍
    上一篇:将Python脚本打包成MACOSAPP程序过程
    下一篇:Django使用celery异步发送短信验证码代码示例
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信