##### 浅拷贝 copy()和深拷贝deepcopy()
先来看一组赋值 复制的例子 \# 赋值得到的复制结果是同一个对象,同一块内存地址
\>>> a=5
\>>> id(a)
1357604080
\>>> b=a
\>>> b
5
\>>> id(b)
1357604080
\>>>
\>>> ad={"hello":"world"} \#copy不适用与int 和 str类型,是否仅仅适用于字典类型还待验证
\>>> bd=ad
\>>> id(ad)
57487792
\>>> id(bd)
57487792 \# 可得出 ,bd,ad引用了同一个内存对象
\>>> cd=ad.copy()
\>>> id(cd) \#经过copy后的cd的内存地址发生改变
55731856
\>>>
\>>> bd\["hello"\]="tom"
\>>> bd
{'hello': 'tom'}
\>>> ad
{'hello': 'tom'} \#由于bd,ad是同一块内存对象,所以修改bd的值,ad会随之改变
\>>> cd
{'hello': 'world'} #由于cd是拷贝过来的,所以ad改变 cd不会变
\>>>
\>>> x={"name":"tom","ages":\["22","23","25"\]}
\>>> y=x.copy()
\>>> y
{'name': 'tom', 'ages': \['22', '23', '25'\]}
\>>> id(x)
56675088
\>>> id(y)
55732000
惊奇的一幕: 删掉y中列表ages中的一个元素,x中的值会变化,虽然他们不是同一个内存对象
\>>> y\["ages"\].remove("25")
\>>> y
{'name': 'tom', 'ages': \['22', '23'\]}
\>>> x
{'name': 'tom', 'ages': \['22', '23'\]}
\>>>
但是,修改字符串内容,x 和y 却互不影响,
\>>> y
{'name': 'tom', 'ages': \['22', '23'\]}
\>>> x
{'name': 'tom', 'ages': \['22', '23'\]}
\>>> y\["name"\]="jarry"
\>>> y
{'name': 'jarry', 'ages': \['22', '23'\]}
\>>> x
{'name': 'tom', 'ages': \['22', '23'\]}
\>>>
结论是: 同一个列表是同一个对象,修改就会发生变化
deepcopy() #使用时要先导入 copy模块
\>>> import copy
\>>> z=copy.deepcopy(x)
\>>> z
{'name': 'tom', 'ages': \['22', '23'\]}
\>>> id(x)
56675088
\>>> id(y)
55732000
\>>> id(z)
57488176
\>>>
\>>> x\["ages"\].remove("23")
\>>> x
{'name': 'tom', 'ages': \['22'\]}
\>>> y
{'name': 'jarry', 'ages': \['22'\]}
\>>> z
{'name': 'tom', 'ages': \['22', '23'\]} \#z没有随着x的变化而变化,即所谓的深拷贝
\>>>
##### clear
\>>> h=copy.deepcopy(x)
\>>> h
{'name': 'tom', 'ages': \['22'\]}
\>>> h.clear() \#将字典中所有元素清空
\>>> h
{}
\>>>
(11) **集合**
如果说,元组tuple是列表和字符串的杂合,那么集合set就是list和dict的杂合
\>>> s=set("hello")
\>>> s
{'e', 'l', 'o', 'h'} \#集合中的元素不能重复
\>>>
\>>> s2={123,"hello",123,"124"}
\>>> s3=set(s2)
\>>> s3
{123, 'hello', '124'}
\>>>