zoukankan      html  css  js  c++  java
  • Python 5个极易混淆的核心概念!

    最近一周思考总结了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]
  • 相关阅读:
    leetcode 1301. 最大得分的路径数目
    LeetCode 1306 跳跃游戏 III Jump Game III
    LeetCode 1302. 层数最深叶子节点的和 Deepest Leaves Sum
    LeetCode 1300. 转变数组后最接近目标值的数组和 Sum of Mutated Array Closest to Target
    LeetCode 1299. 将每个元素替换为右侧最大元素 Replace Elements with Greatest Element on Right Side
    acwing 239. 奇偶游戏 并查集
    acwing 238. 银河英雄传说 并查集
    acwing 237程序自动分析 并查集
    算法问题实战策略 MATCHORDER 贪心
    Linux 安装Redis全过程日志
  • 原文地址:https://www.cnblogs.com/kcxg/p/15543068.html
Copyright © 2011-2022 走看看