社区所有版块导航
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开发 • 1 年前 • 167 次点击  
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

作者丨zhenguo

来源丨程序员zhenguo

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]

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152722
 
167 次点击