python基础讲解之 ‘=’和‘copy’的区别
程序员文章站
2022-12-01 19:47:37
python基础讲解之 ‘=’和‘copy’的区别
a=[1,2,3]
#等号赋值相当于把a的地址赋给了b,现在a和b一起指...
python基础讲解之 ‘=’和‘copy’的区别
a=[1,2,3] #等号赋值相当于把a的地址赋给了b,现在a和b一起指向【1,2,3】这个列表 b=a print(id(a)) #43787784 print(id(b)) #43787784 #因为指向相同,修改内容,a,b当然都会改变 a[0]=100 print(a) #[100, 2, 3] print(b) #[100, 2, 3] #如果a又指向了一个新的列表,那么a的地址会变,但b好好的,还是指向原本的列表 a=[11,22,33] print(a) #[11, 22, 33] print(b) #[100, 2, 3] #不管a指向哪个列表,删除a,只是把a这个地址删除了,不会影响b del a print(b) #当a是二维列表,原理同上 a=[[1],[2]] b=a print(id(a)) #43943880 print(id(b)) #43943880 b[0][0]=100 print(a) #[[100], [2]] print(b) #[[100], [2]] import copy a=[1,2,3] #copy进行的是普通的复制,即浅层复制后为两个独立的对象 #就比如 对门装修的房子很好看 你照着样子把自己家装修的和对门一模一样 b=copy.copy(a) print(id(a)) #43681864 print(id(b)) #43681928 a[0]=100 #这时改变a,是不会影响b的 print(a) #[100, 2, 3] print(b) #[1, 2, 3] #因为a,b是两个独立的存在,所以删除a对b没影响 del a print(b) # #当a是一个二维列表 a=[1,[2]] b=copy.copy(a) print(id(a)) #copy出来的地址肯定不一样 print(id(b)) #修改第二层的时候,a,b会一起变,所谓的浅copy就是指两个独立的范围只限第一层 b[1][0]=100 print(a) #[1, [100]] print(b) #[1, [100]] #利用深层复制操作二维列表,此时a和b彼此互不干扰 a=[[1],[2]] b=copy.deepcopy(a) print(id(a)) #44023176 print(id(b)) #44028680 b[0][0]=100 print(a) #[[1], [2]] print(b) #[[100], [2]]
推荐阅读
-
Python基础之文件读取的讲解
-
JS基础之BOM的作用和使用实例讲解
-
JS基础之语法的作用和使用实例讲解
-
JS基础之DOM的作用和使用实例讲解
-
python基础教程:dir()和__dict__属性的区别
-
Python中extend和append的区别讲解
-
Python Pandas DataFrame:查询数据or选择数据(selection)之loc,iloc,at,iat,ix的用法和区别
-
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
-
Python探索之静态方法和类方法的区别详解
-
python人脸识别项目之基础学习(三):矩阵的基本运算 + 张量的阶和形态