• 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]: [[8, 1, 2], [5, 4, 6]]
    In [11]: b
    Out[11]: [[8, 1, 2], [5, 4, 6]]
    复制代码

    而深拷贝后,修改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]: [10, 1]
    复制代码

    以上就是本次分享的所有内容,想要了解更多欢迎关注 ,每日干货分享

  • 相关阅读:
    计算一个区间时间差值,时间保留剩下的差值
    前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循环结构、内置方法
    大数据之Kafka
    react框架 将数据存入数据库中
    最优化 | 一维搜索与方程求根 | C++实现
    旅游信息推荐系统带文档springboot+vue
    vue3 + vite 性能优化 ( 从5s -> 0.5s )
    不懂就问,快速成为容器服务进阶玩家!
    xxl-job源码解析(技术分享)
    VIM 搜索时的大小写敏感
  • 原文地址:https://blog.csdn.net/m0_59485658/article/details/124992069