所有对象都有引用计数
#! /usr/bin/python3.4
import sys
a = 37 # 创建一个值为37的对象,a引用这个对象的一个名称
count = sys.getrefcount(a) # 获得对象的当前引用计数
print(count) # 9
b=a #增加37的引用计数
c=a #增加37的引用计数
print(sys.getrefcount(a)) # 11
del c
print(sys.getrefcount(a)) # 10
b=42
print(sys.getrefcount(a)) # 9
引用:
a = [1,3,5,8]
b = a # b是对a的引用
b[2] = 100
print(a) # [1, 3, 100, 8]
在此例子中,a和b引用的是同一个对象,修改其中任意一个变量都会影响到另一个。
复制(分浅复制和深复制):
#! /usr/bin/python3.4
import copy
a = [1,3,[2,4],5,8]
#浅复制 只复制父对象,不复制对象内部的子对象(共用)
b=list(a)
b.append(100)
print(b) # [1, 3, [2, 4], 5, 8, 100]
print(a) # [1, 3, [2, 4], 5, 8]
b[2][0] = 100
b[1] = 200
print(b) # [1, 200 , [100, 4], 5, 8, 100]
print(a) # [1, 3, [100, 4], 5, 8]
#深复制 父对象子对象都复制
c = copy.deepcopy(a)
c[2][0] = 200
print(c) # [1, 3, [200, 4], 5, 8]
print(a) # [1, 3, [100, 4], 5, 8]