python基础-布尔表达式
python基础-布尔表达式
思考题:浅拷贝和深拷贝
list1=[10,11,23,44,5]
list2=list1 #普通赋值型,其实指向的id是一样的。
list1[0]=100 修改了list1里面的值,list2里面的值也会跟着改变
1.因为其实list1和list2指向的是同一个内存地址
print(list1)
print(list2)
则
[100, 11, 23, 44, 5]
[100, 11, 23, 44, 5]
查看指向的id
print(id(list1))
print(id(list2))
发现他们指向的id是一样的。
2737363998664
2737363998664
2如果希望两者互不干扰 使用切片
此时两个id是不一样的,修改了list1的值,list2的值不会一起发生改变
list2=list1[:]
3.引入深拷贝
修改元组内子列表的值,就算是切片也不管用了
因为:切片可以生成新的列表,但对于子列表而言,仍然指向的是同一个地址。
list1=[10,11,[9,8],23,44,5]
list2=list1[:]
list1[2][0]=999
print(list1)
print(list2)
则:
[10, 11, [999, 8], 23, 44, 5]
[10, 11, [999, 8], 23, 44, 5]
此时修改list1里面的值,list2里面的值虽然是list1的切片,但经过了深拷贝就不会被变化了。
import copy #导入标准库中的copy模块。
list1=[10,11,[9,8],23,44,5]
list2=list1[:]
list2=copy.deepcopy(list1)
list1[2][0]=999 在深拷贝之后修改
print(list1)
print(list2)
则:
[10, 11, [999, 8], 23, 44, 5]
[10, 11, [9, 8], 23, 44, 5]
浅拷贝:甚至不需要导入。
list2=copy.copy(list1) 浅拷贝,等价于切片[:]
浅拷贝:列表之间是没有影响的,但是子列表之间是有影响的。
总结:
1.list2=list1
2.切片。list2=list2[:]
3.浅拷贝:list2=copy.copy(list1) 如上解释
4.深拷贝:需要导入一个模块。
import copy
list2=copy.deepcopy(list1)
布尔表达式
eg:
print(2>1)
True
print(2>11)
False
#布尔表达式True真,也可以用1来表示,False假可以用0来表示
print(‘a’>“b”) # a=97,A=65
print(‘a’>‘B’)
False
True
当多个字母一起比较时,只有第一位相同时,才会向后比较
print(‘aA’>‘Aa’)
True
#赋值号= 与恒等号==
print(1==1)
in ,not in
1>
print(10 in list1)
True
2>
print(9 in list1) 9不在列表list1里面,而是在它的子列表里面
False
3>
print(8 in list1[2]) # 8在子列表
True
4>
print(‘10’ in list1)
False 数据类型不对
5>
print(999 not in list1)
True
6>
print(9 not in list1)
True
逻辑运算符 and并且 ,or或者
1》and
print(1>2 and 2>1) 并且
在and中,无论有多少个and,只要当中有一个假就为假,全真则为真。
2》or
print(1>3 or 3>4 or 3>2)
在or 中,无论有多少个or,只要当中有一个为真,则最终为真。
3》混合
and ,or ,not优先级 not >and >or
print(1>2 and 2>1 or 3>20 and 5>4 or 6>5)
假 or 假 or 真
True
括号改变优先级
print(1>2 and 2>1 or 3>20 and (5>4 or 6>5))
False
应用场景
查看百度里面搜索元素是否存在