Python 基础教程:动态类型模型 (1),阿里巴巴 Python 面试题答案
当把对象赋值给变量时,并不是替换了原始的对象,而是让这个变量去引用另一个完全不同的对象。 例如,当变量重新赋值时,a=‘abc’,变量 a 引用的是另一处内存空间。此时,b 是 3,而 a 是 abc。 a='abc' **1,共享引用和可原处修改** 当共享引用的对象是可变类型时,对可变对象的修改,会反应到共享引用的变量上。 例如,变量 l1 和 l2 是共享引用,引用的对象是列表,而列表支持原处修改: l1=[1,2,3] l2=l1 当修改变量 l1 引用的对象的值时,变量 l1 和 l2 引用的还是同一个内存空间,l1 和 l2 的值是相同的。 l1[0]=5 **2,共享引用和相等** ![](https://static001.geekbang.org/infoq/a7/a74ca620f34c4bb6888d6f206d64adae.png) \==和 is 是不同的“相等”比较,前者是指值相等,后者是指对象的同一性(同一个对象)。 例如,a 和 b 既是值相等,也是对象同一的。 a=[1,2] b=a 例如,a 和 b 是值相等,但是对象不是同一个,这说明,可变类型的常量的缓存是不可复用的。 a=[1,2] b=[1,2] 例如,x 和 y 既是值相等,也是对象同一的,这说明,不可变类型的常量的缓存是复用的。 x=1 y=1 #### []( )四,深拷贝和浅拷贝 浅拷贝是指引用的拷贝,深拷贝是指对象的拷贝。在 Python 中,浅拷贝存在于下面三种情况: * 共享引用是浅拷贝,两个变量引用同一个对象。 * 由于 Python 会复用不可变对象,因此,不可变对象的赋值都是浅拷贝。 * 赋值生成的是浅拷贝。 深拷贝是指值相同的不同对象,因此,== 运算的结果是 True,而 i s 运算的结果是 False,例如,a 和 b 的值相同,但是引用的对象不同。 a=[1,2] b=[1,2] 对 a 进行修改,不会引用 b 的值,列表的深拷贝,也可以通过 list.copy()函数来实现。 ''' 遇到问题没人解答?小编创建了一个 Python 学习交流 QQ 群:531509025 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和 PDF 电子书! ''' >>> a=[1,2] >>> b=a.copy() >>> a==b True >>> a is b False 对于可变类型的深拷贝: * 列表类型有:list.copy(),list\[:\],`list(list_var)` 现在能在网上找到很多很多的学习资源,有免费的也有收费的,当我拿到 1 套比较全的学习资源之前,我并没着急去看第 1 节,我而是去审视这套资源是否值得学习,有时候也会去问一些学长的意见,如果可以之后,我会对这套学习资源做 1 个学习计划,我的学习计划主要包括规划图和学习进度表。 分享给大家这份我薅到的免费视频资料,质量还不错,大家可以跟着学习 ![](https://static001.geekbang.org/infoq/16/168bb2b8e6ba5e1bbb6581befec82bd7.png)
评论