码迷,mamicode.com
首页 > 其他好文 > 详细

深浅拷贝的一些理解和练习

时间:2019-04-03 22:09:33      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:复制   pass   相同   对象   trace   理解   不同   遇到   也会   

lst=[1,11,10,2,21] lst [1, 11, 10, 2, 21] lst.sort(key=int) lst [1, 2, 10, 11, 21] lst.sort(key=str) lst [1, 10, 11, 2, 21] lst[0] 1 lst[1] 10 #(key=str),用key作比较,下面相当于内置的函数 #for x in len(lst): # if str(x[i])>int(x[i+1]) # pass lst.append(‘1.5‘) lst [1, 1.5, 2, 10, 11, ‘1.5‘, ‘1.5‘, ‘1.5‘] lst.sort() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-23-b7de4ff5ffae> in <module> ----> 1 lst.sort() TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘ lst.pop() ‘1.5‘ lst [1, 1.5, 2, 10, 11, ‘1.5‘, ‘1.5‘] lst.sort() --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-26-b7de4ff5ffae> in <module> ----> 1 lst.sort() TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘ lst.sort(key=str) lst [1, 1.5, ‘1.5‘, ‘1.5‘, 10, 11, 2] lst.sort(key=int) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-29-67bb97e53cd1> in <module> ----> 1 lst.sort(key=int) ValueError: invalid literal for int() with base 10: ‘1.5‘ lst.sort(key=float) lst [1, 1.5, ‘1.5‘, ‘1.5‘, 2, 10, 11] lst0=list(range(4)) lst2=list(range(4)) #内容虽然一样,但是地址是不一样的 print(lst0==lst2) lst1=lst0 #地址复制 lst1[2]=10 print(lst0) print(lst1) print(lst2) True [0, 1, 10, 3] [0, 1, 10, 3] [0, 1, 2, 3] lst0=[1,[2,3,4],5] lst5=lst0.copy() lst0 [1, [2, 3, 4], 5] lst5 [1, [2, 3, 4], 5] lst0==lst5 True lst0[2]=5 lst0[1][1]=20 lst0[1][0]=30 lst0 #浅拷贝;[30,20,4]整体是一个地址,改一个,另一个引用同一个地址也会变,前已发动全身,故([1,2,3]*5)要非常谨慎 [1, [30, 20, 4], 5] lst5 [1, [30, 20, 4], 5] id(lst0) 4572609928 id(lst5)#内容完全一致,但是地址 4573317384 lst0=[1,[2,3,4],5]#深拷贝,将内容完全复制,[2,3,4]是一个地址,但是复制内容,生成另一个地址,复制内容 from copy import deepcopy lst5=deepcopy(lst0) lst0==lst5 True lst0[2]=50 lst0==lst5 False #lst=[1,2,3] #lst1=lst #同一个对象,将一个赋值给另一个 #lst2=lst.copy() #内容相同,不同对象,遇到引用类型不复制对象,复制地址 #lst3=copy.deepcopy(lst)#内容相同,不同对象遇到引用类型也会复制出不同的对象 ?

深浅拷贝的一些理解和练习

标签:复制   pass   相同   对象   trace   理解   不同   遇到   也会   

原文地址:https://blog.51cto.com/14167037/2373871

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!