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