美文网首页扣丁学堂Python培训
什么是Python赋值与拷贝

什么是Python赋值与拷贝

作者: 994d14631d16 | 来源:发表于2018-09-04 11:45 被阅读5次

关于Python开发技术想必小伙伴们并不陌生,但是对于Python赋值与拷贝有多少的小伙伴了解的透彻呢?本篇文章扣丁学堂Python培训小编就和大家分享一下Python赋值与拷贝,对此感兴趣的小伙伴下面就随小编一起来看一下吧。

什么是Python赋值与拷贝

变量与赋值:

在Python中,一切皆为对象,对象通过「变量名」引用,「变量名」更确切的叫法是「名字」,好比我们每个人都有自己的名字一样,咱们通过名字来代指某个人,代码里面通过名字来指代某个对象。

变量赋值就是给对象绑定一个名字,赋值并不会拷贝对象。好比我们出生的时候父母就要给我们取一个名字一样,给人取个绰号并不来多出一个人来,只是多一个名字罢了。

两个对象做比较有两种方式,分别是:is 与 == ,is比较的是两个对象是否相同,通过对象的ID值可识别是否为相同对象,==比较的是两个对象的值是否相等。

>>> x1 = [1,2]

>>> x2 = [1,2]

>>> x1 is x2

False

>>> id(x1)

4338854088

>>> id(x2)

4338904392

>>> x1 == x2

True

x1 和 x2 的值虽然相同,但在内存中是两个独立的不同的对象,占据不同的内存空间,就好比两个长得一样的苹果摆在桌子上,实则为两个不同的物体。

>>> x3 = x2

>>> x3 is x2

True

>>> id(x3)

4338904392

前面说了,赋值是给对象绑定名字,这里我们只不过是给 x2 对应的那个对象绑定了一个新的名字叫 x3,这就好比桌上放了一个苹果,开始给它贴了一个 x2 的标签,后来又给它添了一个 x3 的标签,本质上还是同一个苹果,所以,x2 和 x3 所指的其实是同一个对象。

什么是Python赋值与拷贝

通过x2 修改对象时,x3 也会跟着变化,因为本质上它们是同一个对象,这就好比张三和小张是同一个人时,给张三添衣服其实就是给小张添衣服。

>>> x2.append(3)

>>> x2

[1, 2, 3]

>>> x3

[1, 2, 3]

但是,当我给x2 重新赋值时,相当于x2 不再引用之前的对象,而引用新对象,x3 依然引用之前的对象。好比桌上一大苹果开始贴了x2 和x3 两个标签,给x2 重新赋值就相当于把x2 标签贴到另外一个苹果,但是x3 还是贴在老苹果身上。

>>> x2 = [3, 4]

>>> x3

[1, 2, 3]

什么是Python赋值与拷贝

对象拷贝:

在业务中有时我们需要复制一个对象,但是又不想对原对象产生副作用,肯定不能通过赋值给一个新变量来解决(因为赋值不是拷贝对象),所以Python 专门提供了一种拷贝机制,基于原对象快速创建出一个含有相同值的对象。该功能由copy模块提供。

拷贝又分为浅拷贝和深拷贝。

>>> s = [1,2,3]>>> sc = copy.copy(s) # 浅拷贝>>> sc[1, 2, 3]

>>> sdc = copy.deepcopy(s) # 深拷贝

>>> sdc

[1, 2, 3]

拷贝出来的对象只是值相同,实为不同的对象:

>>> s == sc == sdc

True

>>> s is sc

False

>>> s is sdc

False

那么浅拷贝(shallow copy)与深拷贝(deep copy)有什么区别呢?

对于不可变对象,比如整数、字符串、元组、还有由这些不可变对象组成的集合对象,浅拷贝和深拷贝没有区别,都是拷贝一个新对象

两者的区别在于拷贝组合对象,比如列表中还有列表,字典中还有字典或者列表的情况时,浅拷贝只拷贝了外面的壳子,里面的元素并没有拷贝,而深拷贝则是把壳子和里面的元素都拷贝了一份新的。

来看一个例子:

>>> x = [2, 3]

>>> y = [7, 11]

>>> z = [x, y]

>>> a = copy.copy(z) # 浅拷贝

>>> a[0] is z[0]

True

什么是Python赋值与拷贝

拷贝出来的对象 a 中的元素引用的是 x 和 y,当你修改 x 的值,a 也会跟着变。

>>> b = copy.deepcopy(z) # 深拷贝

>>> b[0] is z[0]

False

什么是Python赋值与拷贝

对于深拷贝,里面的元素也重新拷贝了一份,拷贝了一份与x和y等值的两个元素,修改 x 和 y 的值,不会对 b 产生影响。

对列表的切片拷贝z[:]或者是调用对象的copy方法list.copy()都属于浅拷贝。对于自定义对象,我们还可以自己实现__copy__方法和__deepcopy__方法。

最后想要了解更多关于Python方面内容的小伙伴,请关注扣丁学堂Python培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的UI设计视频,通过千锋扣丁学堂金牌讲师在线录制的Python开发教程,让你快速掌握Python从入门到精通开发实战技能。

相关文章

  • 什么是Python赋值与拷贝

    关于Python开发技术想必小伙伴们并不陌生,但是对于Python赋值与拷贝有多少的小伙伴了解的透彻呢?本篇文章扣...

  • python的三种拷贝

    一、赋值拷贝(引用拷贝) 什么是赋值拷贝了?了解拷贝前要知道python中是如何内存存储变量的。 上图中,当把10...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋...

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • python中的深拷贝与浅拷贝

    为什么有深拷贝与浅拷贝 在Python中对象的赋值其实就是对象的引用。当创建一个对象,把它赋值给另一个变量的时候,...

  • Python入门知识有哪些,赋值与拷贝有什么差异

    Python入门知识有哪些?赋值与拷贝有什么差异?Python入门简单,对初学者非常友好,但仍然有很多同学表示学习...

  • Python入门知识有哪些 ?赋值与拷贝有什么差异?

    Python入门知识有哪些?赋值与拷贝有什么差异?Python入门简单,对初学者非常友好,但仍然有很多同学表示学习...

  • 赋值 浅拷贝 深拷贝

    Python中的赋值(复制)、浅拷贝与深拷贝 - 晚来天欲雪的文章 - 知乎[https://zhuanlan.z...

  • Python中的赋值及深浅拷贝

    Python中的赋值及深浅拷贝 赋值 示例 打印 浅拷贝 示例 打印 深拷贝 示例 打印 三层列表演示 示例 打印

  • Python之赋值与拷贝

    考察:赋值、深拷贝、浅拷贝 1.对象的赋值 都是进行对象引用(内存地址)传递,即‘’ b is a‘’ ,a 变 ...

网友评论

    本文标题:什么是Python赋值与拷贝

    本文链接:https://www.haomeiwen.com/subject/oargwftx.html