前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 5个极易混淆的核心概念!

Python 5个极易混淆的核心概念!

作者头像
double
发布2022-01-26 13:47:01
4200
发布2022-01-26 13:47:01
举报
文章被收录于专栏:算法channel

你好,我是zhenguo

这是我五年来的第480篇原创

最近一周思考总结了Python 5个比较容易混淆的核心概念,同时附上我最通俗的区分和理解方法,相信对你一定有帮助!

1 变量赋值和别名

Python变量赋值是指创建一个对象并绑定到某个变量上,如下创建一个列表对象,并赋值给变量a:

代码语言:javascript
复制
a = [3,1,2]

以上基本范式可表达为:

代码语言:javascript
复制
variable1 = object1

而别名是指变量1赋值给变量2的过程:

代码语言:javascript
复制
variable2 = variable1

比如:

代码语言:javascript
复制
b = a 

并且修改变量b,变量a也会变化,所以被称为别名

代码语言:javascript
复制
b[0] = 8 # a[0] 也会变为8

2 别名和浅拷贝

别名和浅拷贝会被经常混淆,别名如上所述仅仅是某个变量赋值给某个变量,仅此而已。

而浅拷贝已经发生一层复制,并且在这一层上修改某个变量,不会影响另一个变量。如下:

代码语言:javascript
复制
b = a.copy()
b[0] = 8 # 此时修改b[0]不会影响a

3 == 和 is

Python一切皆对象,而每个对象又有"三大件":

  • 编号
  • 类型

基于此,A == B 比较的是对象A和B的值是否相等;A is B 比较的是对象A和B的编号是否相等。记住这句话,或许你再也不会混淆这两个操作符。

4 浅拷贝和深拷贝

对象是可以做有限次嵌套的,可以有很多层。

浅拷贝只拷贝最外层;而深拷贝会拷贝所有层。

代码语言:javascript
复制
a = [[3,1,2], [5,4,6]]

浅拷贝意味着修改b的第一层不影响a,但是修改b的第二层会同步影响到a,如下修改第二层会同步影响a

代码语言:javascript
复制
from copy import copy

In [8]: b=copy(a)

In [9]: b[0][0]=8
In [10]: a
Out[10]: [[8, 1, 2], [5, 4, 6]]
In [11]: b
Out[11]: [[8, 1, 2], [5, 4, 6]]

而深拷贝后,修改b的任意层都不会影响a

5 可变和不可变

还记得第3节提起的每个对象"三大件"吗?每个对象都有类型,而我们讨论可变和不可变时,其实指代的正是类型

不可变的类型常见的:整型、字符串、浮点型、元组、冻结集合

可变的类型常见的:列表、字典、集合

不可变意味着值不能被修改,如下修改元组的值,会抛出TypeError的异常,这是和类型密切相关的异常:

代码语言:javascript
复制
a = (3,1)
a[0] = 10

TypeError: 'tuple' object does not support item assignment

而可变意味着值能被修改:

代码语言:javascript
复制
In [14]: a = [3,1]

In [15]: a[0] = 10

In [16]: a
Out[16]: [10, 1]
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 变量赋值和别名
  • 2 别名和浅拷贝
  • 3 == 和 is
  • 4 浅拷贝和深拷贝
  • 5 可变和不可变
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档