C/C++教程

四、数据类型 11.切片copy和dict_copy

本文主要是介绍四、数据类型 11.切片copy和dict_copy,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

切片copy和dict_copy

切片
    可变类型数据切片
        copy最外层对象的值,产生新的内存空间,其中的子对象仅被引用,不会copy

    不可变类型数据切片
        无论子对象是否为可变类型,副本对象和子对象都仅被引用,不会被copy

dict.copy()
    dict对象会被copy,dict中容器类型的子对象仅被引用

# 一维list切片
def list_test():
    list1 = [1,2,3,4,5]
    list2 = list1[:]
    print('list1:',list1,id(list1))
    print('list2:',list2,id(list2))
    list1.remove(3)
    print('list1:',list1,id(list1))
    print('list2:',list2,id(list2))
list_test()


list1: [1, 2, 3, 4, 5] 386665697800
list2: [1, 2, 3, 4, 5] 386665698312
list1: [1, 2, 4, 5] 386665697800
list2: [1, 2, 3, 4, 5] 386665698312

# 多维list切片
def lists_test():
    A = [1,2,3]
    B = [4,5,6]
    C = [A,B]
    print('A:',A,id(A))
    print('C:',C,id(C))

    D = C[:]
    print('D:',D,id(D),' D[0]:',D[0],id(D[0]))

    A[1] = 10
    C[1] = 10
    print('A:',A,id(A))
    print('C:',C,id(C))
    print('D:',D,id(D),' D[0]:',D[0],id(D[0]))
lists_test()


A: [1, 2, 3] 386665698312
C: [[1, 2, 3], [4, 5, 6]] 386797148296
D: [[1, 2, 3], [4, 5, 6]] 386797148232  D[0]: [1, 2, 3] 386665698312
A: [1, 10, 3] 386665698312
C: [[1, 10, 3], 10] 386797148296
D: [[1, 10, 3], [4, 5, 6]] 386797148232  D[0]: [1, 10, 3] 386665698312

# 一维tuple切片
def tuple_test():
    tuple1 = (1,2,3,4,5)
    tuple2 = tuple1[:]
    print('tuple1:',tuple1,id(tuple1))
    print('tuple2:',tuple2,id(tuple2))
tuple_test()


tuple1: (1, 2, 3, 4, 5) 447164963240
tuple2: (1, 2, 3, 4, 5) 447164963240

# 多维tuple切片
def tuples_test():
    A = [1,2,3]
    B = (4,5,6)
    C = (A,B)
    print('A:',A,id(A))
    print('B:',B,id(B))
    print('C:',C,id(C))

    D = C[:]
    print('D:',D,id(D),' D[0]:',D[0],id(D[0]))

    A[1] = 10
    print('A:',A,id(A))
    print('C:',C,id(C))
    print('D:',D,id(D),' D[0]:',D[0],id(D[0]))
tuples_test()


A: [1, 2, 3] 447164862984
B: (4, 5, 6) 447295945528
C: ([1, 2, 3], (4, 5, 6)) 447295968328
D: ([1, 2, 3], (4, 5, 6)) 447295968328  D[0]: [1, 2, 3] 447164862984
A: [1, 10, 3] 447164862984
C: ([1, 10, 3], (4, 5, 6)) 447295968328
D: ([1, 10, 3], (4, 5, 6)) 447295968328  D[0]: [1, 10, 3] 447164862984

# dict copy
def dict_test():
    dict1 = {'menu':[1,2,3,4,5],'num':10}
    dict2 = dict1.copy()

    print('dict1:',dict1,id(dict1))
    print('dict2:',dict2,id(dict2))

    # 修改dict
    dict1['name'] = 'messi'
    print('dict1:',dict1,id(dict1))
    print('dict2:',dict2,id(dict2))

    # 修改dict中的value
    dict1['menu'].remove(3)
    dict1['num'] = 100
    print('dict1:',dict1,id(dict1))
    print('dict2:',dict2,id(dict2))
dict_test()


dict1: {'menu': [1, 2, 3, 4, 5], 'num': 10} 570645560920
dict2: {'menu': [1, 2, 3, 4, 5], 'num': 10} 570677005752
dict1: {'menu': [1, 2, 3, 4, 5], 'num': 10, 'name': 'messi'} 570645560920
dict2: {'menu': [1, 2, 3, 4, 5], 'num': 10} 570677005752
dict1: {'menu': [1, 2, 4, 5], 'num': 100, 'name': 'messi'} 570645560920
dict2: {'menu': [1, 2, 4, 5], 'num': 10} 570677005752
这篇关于四、数据类型 11.切片copy和dict_copy的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!