python赋值、浅拷贝、深拷贝

2017-07-03  本文已影响239人  abelweiwencai
# 赋值
    print(u"赋值-不可变对象")
    a = 1
    b = a
    print("a=", a)
    print("b=", b)
    print("---------------")
    a = a + 1  # int 为不可变对象,a的指向变了 a != b
    print("a=", a)
    print("b=", b)
    print("---------------")

    print(u"赋值-可变对象")
    a = list(range(3))
    b = a  # b 引用a 相当于指针
    print("a=", a)
    print("b=", b)
    print("---------------")
    a.append(4)  # 虽然是append,b的值也随之改变,a == b
    print("a=", a)
    print("b=", b)
    print("---------------")

    from copy import copy, deepcopy
    # 浅拷贝
    print(u"浅拷贝")
    a = list(range(3))
    a.append([1, 2])
    b = copy(a)
    print("a=", a)
    print("b=", b)
    print("---------------")
    a.append(1)  # 直接操作a,b不会跟着改变
    print("a=", a)
    print("b=", b)
    print("---------------")
    a[3].append(3)  # 修改a里面的可变实例(相当于引用),b跟着改变
    print("a=", a)
    print("b=", b)
    print("---------------")

    # 深拷贝
    print(u"深拷贝")
    a = list(range(3))
    a.append([1, 2])
    b = deepcopy(a)
    print(a, b)
    a.append(1)
    print("a=", a)
    print("b=", b)
    print("---------------")
    a[3].append(3)
    print("a=", a)
    print("b=", b)
    print("---------------")

运行结果

赋值-不可变对象
('a=', 1)
('b=', 1)
---------------
('a=', 2)
('b=', 1)
---------------
赋值-可变对象
('a=', [0, 1, 2])
('b=', [0, 1, 2])
---------------
('a=', [0, 1, 2, 4])
('b=', [0, 1, 2, 4])
---------------
浅拷贝
('a=', [0, 1, 2, [1, 2]])
('b=', [0, 1, 2, [1, 2]])
---------------
('a=', [0, 1, 2, [1, 2], 1])
('b=', [0, 1, 2, [1, 2]])
---------------
('a=', [0, 1, 2, [1, 2, 3], 1])
('b=', [0, 1, 2, [1, 2, 3]])
---------------
深拷贝
([0, 1, 2, [1, 2]], [0, 1, 2, [1, 2]])
('a=', [0, 1, 2, [1, 2], 1])
('b=', [0, 1, 2, [1, 2]])
---------------
('a=', [0, 1, 2, [1, 2, 3], 1])
('b=', [0, 1, 2, [1, 2]])
---------------
上一篇 下一篇

猜你喜欢

热点阅读