Python五个极易混淆的核心概念

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

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

[[434896]]

1 变量赋值和别名

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

 

  1. a = [3,1,2] 

以上基本范式可表达为:

 

  1. variable1 = object1 

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

 

  1. variable2 = variable1 

比如:

 

  1. b = a 

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

 

  1. b[0] = 8 # a[0] 也会变为8 

2 别名和浅拷贝

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

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

  1. b = a.copy() 
  2. b[0] = 8 # 此时修改b[0]不会影响a 

3 == 和 is

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

  • 编号
  • 类型

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

4 浅拷贝和深拷贝

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

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

 

  1. a = [[3,1,2], [5,4,6]] 

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

 

  1. from copy import copy 
  2.  
  3. In [8]: b=copy(a) 
  4.  
  5. In [9]: b[0][0]=8 
  6. In [10]: a 
  7. Out[10]: [[8, 1, 2], [5, 4, 6]] 
  8. In [11]: b 
  9. Out[11]: [[8, 1, 2], [5, 4, 6]] 

 

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

5 可变和不可变

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

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

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

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

 

  1. a = (3,1) 
  2. a[0] = 10 
  3.  
  4. TypeError: 'tuple' object does not support item assignment 

 

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

 

  1. In [14]: a = [3,1] 
  2.  
  3. In [15]: a[0] = 10 
  4.  
  5. In [16]: a 
  6. Out[16]: [10, 1] 

 

 

责任编辑:华轩 来源: 今日头条
相关推荐

2023-03-08 07:34:23

响应式更新细粒度更新

2009-11-25 11:20:31

并发

2021-01-11 09:33:37

Maven数目项目

2023-10-22 23:28:34

2011-05-23 13:05:25

重载重写隐藏

2022-01-27 13:47:10

Kubernete命令Linux

2011-07-14 15:23:34

java

2018-11-08 15:12:16

数据分析算法决策树

2010-08-30 17:46:10

DHCP服务

2009-02-02 10:00:11

ADO.NETASP.NET

2015-08-18 08:55:03

redux核心

2019-01-23 08:59:00

大数据大数据治理数据管理

2016-09-28 08:52:44

2022-10-08 07:36:08

Kubernetes开源容器

2021-01-15 08:35:49

Zookeeper

2011-07-10 15:18:11

开发

2020-09-23 13:45:07

Python编程语言

2020-09-23 16:56:51

Python语言技术

2019-05-21 21:15:32

架构架构设计性能优化

2019-11-07 09:34:43

Python语言Java
点赞
收藏

51CTO技术栈公众号