Python中的赋值,浅拷贝和深拷贝的区别赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个 。
浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}
深拷贝:创建一个新的对象 , 并且递归的复制它所包含的对象(修改其中一个 , 另外一个不会改变){copy模块的deep.deepcopy()函数}
Python的赋值与复制对于Python的初学者,在对象的使用过程中 , 由于对变量的赋值和对象的复制中的概念模糊,导致程序出错 。
例如,下面的代码:
输出结果为:
a = [6,2,3,4,5],
b = [6,2,3,4,5],
c = [1,2,3,4,5]
a等于b?True
a等于c?True
a是b?True
a是c? False
可以看到 , a,b, c所指向的对象的值都相同(a==b为True). a和b都是代表同一个对象(a is b为True) 。当我们通过变量b对该列表进行修改时,由于a也指向该列表,所以当打印a,b时,我们得到相同的值 。而a和c则是代表不同的对象(a is c为False),所以修改b所指向得列表不会改变c梭子乡的列表的值.
在Python中,所有的变量都代表了对象,即便是简单的数字类型(int, float, bool),也是以对象的形式存在的 。我们看下面的代码:
输出结果是:
a==b为True
a is b为True
可见,a, b都是指向同一个对象 。接下来,进行下面的操作 ,
输出结果是:
a = 1, b = 2
a is b为False
与前面的列表不同,当我们对b做修改时,实际上是给b赋予了一个新生成的对象 , 对数值类型来说,所有的数值运算都会创建一个数值对象,并将这个对象指定给变量 。因此,a与b指向了不同的对象,数值也不同 。
再回过头来看列表对象 ,
我们知道 , b是与a指向同一对象的变量,使用b对该对象进行修改 , 与使用a对该对象进行修改 , 效果是完全一样的 。如果我们需要需要一个与a完全相同又与a相互独立的列表,那么就需要复制这个对象 , 也就是新建一个内容和源对象相同的对象 。
对于列表来说 , 最简单的复制方法是通过下标索引的方式创建新的列表:
对于各种数据类型通用的对象拷贝复制,我们可以使用python内建的copy模块 。
对于复杂对象(如嵌套列表)的复制,则需要注意区分浅拷贝和深拷贝 。我们来看下面的代码:
得到的结果是:
a[0] is b[0]为 True
a[0] is c[0]为 False
a = [[-1, 2, 3], [4, 5, 6]]
b = [[-1, 2, 3], [7, 8, 9]]
c = [[1, 2, 3], [4, 5, 6]]
a[1] is b[1]为False
从上面的代码我们可以看到,copy函数为浅拷贝,只拷贝了对象的外层 , 而对象内部所包含的对象仍然指向原有的对象 。而deepcopy则为深拷贝 , 对象内部的对象也进行了复制 。
以上我们对变量的赋值和对象的复制做了更加深入的分析 。在具体的使用中,我们需要根据具体来决定使用赋值、浅拷贝、深拷贝 。
浅谈python中的变量赋值在python中,变量赋值的语法比较简单,语法就是 “变量名 = 对象” , 由于python属于动态语音,所以不需要像c、 java那样在变量赋值时需要声明变量的类型 。
c 变量赋值
int x = 1;
python 变量赋值
x = 1
y = "hello world!"
a = [1, 2]
b = ('a', 'b')
c = {"foo": "bar"}
python 变量赋值中,所涉及到的变量命名是有一定规则的:
推荐阅读
- 尼龙pg头安装扭力,尼龙管接头怎么安装
- sqlserver哪个视频好,sqlserver视频教程网盘
- linux命令开新窗口,linux 打开窗口
- b站手机直播未响应,b站开始直播没反应
- php处理16进制数据 php 进制转换
- 直播间运营要干什么,直播间运营要干什么呢
- 什么软件拍摄闪闪的,什么软件拍摄闪闪的星星最好
- MK直播ios软件下载,mk直播是什么平台
- linux大包文件命令 linux打包文件