zoukankan      html  css  js  c++  java
  • 【拷贝问题】

    练习1
    下面代码运行后,a、b、c、d四个变量的值,描述错误的是?

    import copy
    a=[1,2,3,4['a','b','c','d']]
    b=a
    c=copy.copy(a)
    d=copy.deepcopy(a)
    a.append(5)
    a[4].append('c')
    

    正确结果为:

    a==[1,2,3,4,['a','b','c'],5]
    b==[1,2,3,4,['a','b','c'],5]
    c==[1,2,3,4,['a','b','c']]
    d==[1,2,3,4,['a','b']]
    

    解析:

    b=a 为引用,除非直接给a重新赋值,否则a变则b变
    c=copy.copy(a) 浅拷贝,只会复制父对象,不会拷贝子对象;所以子对象变则c变,父对象变c不变
    d=copy.deepcopy(a) 深拷贝,d与a不相关,a不论怎么变不影响d
    

    !!!字典拷贝实例讲解

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    dict1 =  {'user':'runoob','num':[1,2,3]}
    dict2 = dict1          # 浅拷贝: 引用对象
    dict3 = dict1.copy()   # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用 
    # 修改 data 数据
    dict1['user']='root'
    dict1['num'].remove(1) 
    # 输出结果
    print(dict1)
    print(dict2)
    print(dict3)
    

    结果为:

    {'num': [2, 3], 'user': 'root'}
    {'num': [2, 3], 'user': 'root'}
    {'num': [2, 3], 'user': 'runoob'}
    

    练习2
    字典值为整型数字,变更为另一整型数字

    print('
    字典值为整型数字,变更为另一整型数字
    ')
    import copy
    a={'1':1,'2':2}
    b=copy.copy(a)
    print("最开始,a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    a['1']=5
    a['2']=6
    print("字典a的值变为5和6后, a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    print('a,b两个字典第一个元素各为:',a['1'],b['1'])
    print('a,b两个字典第一个元素和为:',a['1']+b['1'])
    a['1']=1
    a['2']=2
    print("字典a的值变为1和2后, a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    print('a,b两个字典第一个元素各为:',a['1'],b['1'])
    print('a,b两个字典第一个元素和为:',a['1']+b['1'])
    

    结果分别为:

    字典值为整型数字,变更为另一整型数字
    
    最开始,a,a['1'],a['2'],b的内存地址为: 2434050752664 140711531151632 140711531151664 2434051261528
    字典a的值变为5和6后, a,a['1'],a['2'],b的内存地址为: 2434050752664 140711531151760 140711531151792 2434051261528
    a,b两个字典第一个元素各为: 5 1
    a,b两个字典第一个元素和为: 6
    字典a的值变为1和2后, a,a['1'],a['2'],b的内存地址为: 2434050752664 140711531151632 140711531151664 2434051261528
    a,b两个字典第一个元素各为: 1 1
    a,b两个字典第一个元素和为: 2
    

    字典值为字符型,变更为另一整型数字

    print('
    字典值为字符型,变更为另一整型数字
    ')
    import copy
    a={'1':'a','2':'b'}
    b=copy.copy(a)
    print("最开始,a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    a['1']='c'
    a['2']='d'
    print("字典a的值变为'c'和'd'后,a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    print('a,b两个字典第一个元素各为:',a['1'],b['1'])
    print('a,b两个字典第一个元素和为:',a['1']+b['1'])
    a['1']=1
    a['2']=2
    print("字典a的值变为1和2后, a,a['1'],a['2'],b的内存地址为:",id(a),id(a['1']),id(a['2']),id(b))
    print('a,b两个字典第一个元素各为:',a['1'],b['1'])
    

    结果分别为:

    字典值为字符型,变更为另一整型数字
    
    最开始,a,a['1'],a['2'],b的内存地址为: 2434051314136 2434041375408 2434041359728 2434050752664
    字典a的值变为'c'和'd'后, a,a['1'],a['2'],b的内存地址为: 2434051314136 2434012296112 2434012299760 2434050752664
    a,b两个字典第一个元素各为: c a
    a,b两个字典第一个元素和为: ca
    字典a的值变为1和2后, a,a['1'],a['2'],b的内存地址为: 2434051314136 140711531151632 140711531151664 2434050752664
    a,b两个字典第一个元素各为: 1 a
    小小测试一枚
  • 相关阅读:
    struts1 Hibernate3初学
    java学习笔记
    改良程序需要的11个技巧
    SharePoint 2010 PowerShell 系列 之 应用总结
    PowerPivot for excel 100 Create KPI
    Sharepoint 2010 控件系统 之 扩展 SaveButton
    Entity Framework 5 一个模型多个关系图 期待已久了
    PowerPivot for Sharepoint 2010 配制及常见错误
    SharePoint 2010 PowerShell 系列 之 应用总结 (二)
    Sharepoint 2010 控件系统 之 TextField、LookupField、NoteField、RichTextField、SaveButton
  • 原文地址:https://www.cnblogs.com/txdblog/p/15241601.html
Copyright © 2011-2022 走看看