python中重要的基础概念

变量本质:

  • 可以是任意数据类型

  • 不需要指明数据类型,可以重复赋值,可以同时多个赋值

  • 等号就是赋值,把右边的赋值给左边。不等同于数学的等于号,python中的等于号是==

  • 变量名规则:

    • 可以用字母,下划线,尽量不要用__all__前后双下划线的变量名(python的内置函数)

    • 数字不可以数字开头,3a = 2,特殊符号也不行,? = ’h'

  • 指针:所有的数据都用到了指针,变量赋值也就是把变量名指向数据,然后找到数据,比如在内存中创建了一个a的变量,并把它指向’abc‘,即a='abc'。

    • 用id函数查看数据地址,是否为同一个数据

    >>> a = 1
    >>> b = 1
    >>> id(a)
    1806000352
    >>> id(b)
    1806000352
  • 引用计数:对一个不可变数据对象用到的次数,比如1这个数据,它被引用到的次数就叫做引用计数。比如a=1,在变量a创建的时候,计算机不会直接在内存中创建一个空间来保存1,而是找到已有的1,指针指向1,这样a可以找到1,节约内存,假如这时候b=1,引用计数加一。

    • 对于简单数据赋值会用到引用计数,但是复杂的数据比如中文赋值就不会用到引用计数,但是假如a=1,b=a就一定会用到引用计数。

      >>> c=1
      >>> d=1
      >>> id(c)
      1806917856
      >>> id(d)
      1806917856
      >>> a = '你好'
      >>> b = '你好'
      >>> id(a)
      2814784181152
      >>> id(b)
      2814785565776
  • python中用sys.getrefcount()查看引用计数,del函数删除引用计数,不释放内存

    >>> a = 1
    >>> sys.getrefcount(1)
    129
    >>> c= 1
    >>> sys.getrefcount(1)
    130
    >>> d = c
    >>> sys.getrefcount(1)
    131
    >>> del(a)
    >>> sys.getrefcount(1)
    130

深浅拷贝

  • 由于引用计数的引用导致有时候变量用的时候改变一个,另一个会跟着改变。如

    >>> a = [1,2,3]
    >>> b = a
    >>> a[0]=2
    >>> b
    [2, 2, 3]
  • 为防止这种情况发生就需要拷贝实现地址不同
    • 切片拷贝:

      • 浅拷贝:一层列表

      >>> a = [1,2,3]
      >>> b = a[:]
      >>> a[0]=4
      >>> a = [4,2,3]
      >>> b
      [1, 2, 3]
      ​
      import copy
      b = copy.copy(a)
      • 深拷贝:嵌套列表

      import copy
      a=(1,2,6,'k',[1,'b'],[(1,2,5,8,'l','k'),6])
      b = copy.deepcopy(a)

位运算(计算机真正存储的都是二进制补码)

  • 源码反码补码,正数源码反码补码都是其本身;负数源码是正数的符号位变为1(负数符号位都为1),反码是源码符号位不变,其余取反,补码是反码加1。

    ~a  按位取反
    a<<n 左移n位
    a>>n 右移n位
    a&b 与运算,全为1则为1,否则为0
    a|b 或运算,全为0则为0,否则为1
    a^b 异或运算对应相异则为1
原文地址:https://www.cnblogs.com/kmnskd/p/9191352.html