别名
别名就是起另一个名字,实际上是同一个东西,地址完全一样,改变任意一个的值,另一个会随着改变。
person_info = ['age: 18', ['beijing', 'wuhan']] info_other_name = person_info # 别名,他们是在同一个地址上,改变任意一个,另外的跟着改变(可以减少不必要的内存开销) print id(info_other_name), id(person_info) # 地址一样 person_info[0] = 'age: 23' # 改变原地址年龄,info_other_name也跟着变,因为就是一个东西 print u'原来的值', person_info print u'别名的值', info_other_name
输出结果
47750200 47750200 原来的值 ['age: 23', ['beijing', 'wuhan']] 别名的值 ['age: 23', ['beijing', 'wuhan']]
浅复制
浅复制表示只复制表面一层,再深的层次还是指向他原来的地址。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_shallow_copy = copy.copy(person_info) # 浅复制 只复制第一层,其他层还是指向它原来的地址 print id(info_shallow_copy), id(person_info) # 地址不一样 person_info[0] = 'age: 23' # 此处改年龄,person并没有跟着改变 person_info[1].remove('wuhan') # 删除列表里的下一级列表,会跟着改变 print u'原来的值', person_info print u'浅复制的值', info_shallow_copy
输出结果
47791200 47769360 # 地址不一样 原来的值 ['age: 23', ['beijing']] 浅复制的值 ['age: 18', ['beijing']] # 表面上的一层(年龄),独立于原来的值,但往下一层指向的地址还是原来的指向
深复制
深复制之后,所有的内容都独立于原变量存在。
import copy person_info = ['age: 18', ['beijing', 'wuhan']] info_deep_copy = copy.deepcopy(person_info) # 深复制 全部都都复制过来,都不会跟着改变 print id(info_deep_copy), id(person_info) # 地址不一样 person_info[0] = 'age: 23' person_info[1].remove('wuhan') print u'原来的值',person_info print u'深复制的值',info_deep_copy
输出结果
54781712 54859536 原来的值 ['age: 23', ['beijing']] 深复制的值 ['age: 18', ['beijing', 'wuhan']] # 完全独立于原来的变量