Python学习---深浅拷贝的学习
浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层,第二层不被copy
深拷贝: 需要单独的copy模块; import copy
字符串的copy()
字符串的copy(): 也是单独开辟空间,新值的更改不影响旧值
name = ['hhh', 'ftl', 'aaa'] name2 = name.copy() print('name_old:', id(name),name) name2[0] = 'hello' print('name_new:', id(name), name) print('name2:', id(name2), name2)
浅拷贝copy()
浅拷贝copy(): 修改字符串,原来的不变; 更改列表,2个同时修改,以为列表里面还涉及一个指针的索引. 简单讲就是copy()只是简单地copy了第一层引用关系,第二层不被copy
name = [['name', 'hello', 'sex', 'male'], 'hhh', 'ftl', 'aaa'] name3 = name.copy() print('name_old [原始数据] :', id(name), name) # 修改第二个字符串,不影响原来 name3[2] = 'hello' print('name_new[更改字符后]:', id(name), name) print('name3 [更改字符后]:', id(name3), name3) # 修改列表后, 新旧一起改变 name3[0][1] = 'world' print('name_new[更改列表后]:', id(name), name) print('name3 [更改列表后]:', id(name3), name3)
浅拷贝讲解:
【图转载自】http://www.cnblogs.com/yuanchenqi/articles/5782764.html
深拷贝
深拷贝:等于克隆了一份,需要模块的单独支持
name = ['hhh', 222, [100, 200]] name2 = copy.deepcopy(name) print(id(name), id(name2)) print(name, name2) name2[2][1] = 300 print(id(name[2][1]), id(name2[2][1])) print(name, name2)
其他补充
查看内存地址:
name = ['hhh', 'ftl', 'aaa'] name_1 = ['hhh', 'ftl', 'aaa'] name[0] = 'good' # 更改name[0]的值 print(id(name), name) print(id(name_1), name_1)
注解: 字符串本身就是一个类,所以相当于开辟了2个地址空间,所以一个的改变不影响另外一个
关于整型/字符串更改前后的堆栈情况
a = [[1, 2], 3, 4] # a 开辟的是一个整块的内存空间 b = a # 给a 重命名了个名字 b c = a.copy() # c独自开了个内存空间,而且是只复制一层 print('---------------------------------- C = A.copy() ------------------------------') print(a, id(a), id(a[0][0]), id(a[1])) print(c, id(c), id(c[0][0]), id(c[1])) c[0][0] = 9 c[1] = 8 print(a, id(a), id(a[0][0]), id(a[1])) print(c, id(c), id(c[0][0]), id(c[1])) print('---------------------------------- A = B ---------------------------------') print(a, id(a), id(a[0][0]), id(a[1])) print(b, id(b), id(b[0][0]), id(b[1])) b[0][0] = 9 b[1] = 8 print(a, id(a), id(a[0][0]), id(a[1])) print(b, id(b), id(b[0][0]), id(b[1]))
作者:小a玖拾柒
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!