社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Python编程 • 3 年前 • 349 次点击  
来自公众号:程序员zhenguo

你好,我是zhenguo

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

1 变量赋值和别名

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

a = [3,1,2]

以上基本范式可表达为:

variable1 = object1

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

variable2 = variable1

比如:

b = a 

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

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

2 别名和浅拷贝

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

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

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

3 == 和 is

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

  • 编号
  • 类型

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

4 浅拷贝和深拷贝

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

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

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

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

from copy import copy

In [8]: b=copy(a)

In [9]: b[0][0]=8
In [10]: a
Out[10]: [[812], [546]]
In [11]: b
Out[11]: [[812], [546]]

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

5 可变和不可变

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

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

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

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

a = (3,1)
a[0] = 10

TypeError: 'tuple' object does not support item assignment

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

In [14]: a = [3,1]

In [15]: a[0] = 10

In [16]: a
Out[16]: [101]

以上就是5个比较容易混淆的地方。


--- EOF ---


推荐↓↓↓
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/123821
 
349 次点击