- 运算符
1.1 运算符的分类
算术运算符,赋值运算符,比较运算符(关系运算符),逻辑运算符,条件运算符。
1.2 算术运算符
加法运算符:“+”
减法运算符:“-”
除法运算符:“/”
整除:“//”,只保留运算后整数位,并返回该位
取模:“%”,取余
1.3 赋值运算符
赋值运算符的特殊写法 x = x + 3 其实是和 x += 3 是一样的.
+=(x+= 3 相当于 x = x + 3 )
-=(x -= 3 相当于 x= x - 3 )
*=(x = 3 相当于 x = x 3 )
**=(x **= 3 相当于 x = x ** 3 )
/=(x /= 3 相当于 x = x/ 3 )
//=(x //= 3 相当于 x = x // 3 )
%=(x %= 3 相当于 x= x % 3
1.4 比较运算符
比较运算符用来比较两个值之间的关系,总会返回一个布尔值.如果关系成立,返回True,否则返回False。
> 比较左侧值是否大于右侧值
>= 比较左侧的值是否大于或等于右侧的值
< 比较左侧值是否小于右侧值
<= 比较左侧的值是否小于或等于右侧的值
特殊的比较方式:
== 比较两个对象的值是否相等
!= 比较两个对象的值是否不相等
is 比较两个对象是否是同一个对象,比较对象的id
is not 比较两个对象是否不是同一个对象,比较对象的id。
1.5 逻辑运算符
not 逻辑非:not可以对符号右侧的值进行非运算,对于布尔值,非运算会对其进行取反操作,True变False,False变True
and 逻辑与:and可以对符号两侧的值进行与运算。 只有在符号两侧的值都为True时,才会返回True,只要有一个False就返回False。与运算是找False的,如果第一个值为False,则不再看第二个值。
or 逻辑或:或运算两个值中只要有一个True,就会返回True。或运算是找True的。
1.6 非布尔值与或
与运算规则:找False,如果第一个值是False,那么不看第二个值,直接返回第一个值;如果第一个值是True,那么直接返回第二个值。
或运算规则:找True,如果第一个值是True,则不看第二个值,直接返回第一个值。如果第一个值为False,则直接返回第二个值. - 运算符优先级
- 变量在内存中的原理
3.1 不可变类型
不可变数据类型在第一次声明赋值声明的时候, 会在内存中开辟一块空间, 用来存放这个变量被赋的值, 而这个变量实际上存储的, 并不是被赋予的这个值, 而是存放这个值所在空间的内存地址, 通过这个地址, 变量就可以在内存中取出数据了. 所谓不可变就是说, 我们不能改变这个数据在内存中的值, 所以当我们改变这个变量的赋值时, 只是在内存中重新开辟了一块空间, 将这一条新的数据存放在这一个新的内存地址里, 而原来的那个变量就不在引用原数据的内存地址而转为引用新数据的内存地址了.。以下均为不可变类型:
数字(int,long,float)
布尔(bool)
字符串(string)
元组(tuple)
3.2 可变类型
当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变。以下均为可变类型:
列表(list)
字典(dict)
集合(set)
3.3 浅拷贝
1、对于不可变类型 Number String Tuple,浅拷贝仅仅是地址指向,不会开辟新空间。
2、对于可变类型List、Dictionary、Set,浅拷贝会开辟新的空间地址(仅仅是最顶层开辟了新的空间,里层的元素地址还是一样的),进行浅拷贝。
附加参考链接:https://testerhome.com/topics/12319
作业:第三题和第四题