1.b=a只是引用传递
import copy
a=[11,22]
b=a
print('a:%d'%id(a))
print('b:%d'%id(b))
2. copy.copy:产生了新的引用,但是浅复制,指向的是同一个对象
import copy
a=[11,22]
b=copy.copy(a)
print('a:%d'%id(a))
print('b:%d'%id(b))
print('a[0]:%d'%id(a[0]))
print('b[0]:%d'%id(b[0]))
3 c=[a,b]只是传递了引用
import copy
a=[11,22]
b=[33,44]
c=[a,b]
print('a:%d'%id(a))
print('b:%d'%id(b))
print('c[0]:%d'%id(c[0]))
print('c[1]:%d'%id(c[1]))
4 .copy.deepcopy:如果列表里面的都是引用类型,则是深拷贝
import copy
a=[11,22]
b=[33,44]
c=[a,b]
d=copy.deepcopy(c)
print('a:%d'%id(a))
print('b:%d'%id(b))
print('c[0]:%d'%id(c[0]))
print('d[0]:%d'%id(d[0]))
如果列表中的元素是基本类型,则deepcopy也相当于浅拷贝
import copy
a=[11,22]
b=copy.deepcopy(a)
print('a[0]:%d'%id(a[0]))
print('b[0]:%d'%id(b[0]))
5.理解下面的原因
import copy
a=[11,22]
b=[33,44]
c=[a,b]
d=copy.copy(c)
e=copy.deepcopy(c)
c.append([55,66])
print(c)
print(d)
print(e)
6.元组本身是不可变类型,对于浅拷贝则相当于不拷贝
import copy
a=(11,22)
b=copy.copy(a)
# b=copy.deepcopy(a)
print(id(a))
print(id(b))
若是深拷贝,则要看元组内的元素是可变类型还是不可变类型,若是不可变类型则相当于不拷贝,如果是可变类型,则是深拷贝
import copy
a=[11,22]
b=[33,44]
c=(a,b)
d=copy.copy(c)
e=copy.deepcopy(c)
print(id(c))
print(id(d))
print(id(e))
如果copy.copy和copy.deepcopy对一个全部都是不可变类型的数据进行拷贝,则结果相同,都是引用指向
如果拷贝的是一个拥有不可变类型的
深拷贝如果是元素内容有一个可变的,则都是新建对象,如果都是不可变的,则不创建对象