逻辑运算符:not and or
等同于c/c++中的 !、&&、||,除了写法上的不同,实际原理是一样的。
运算也遵循短路原则。由于Python本身不支持++/--操作符,所以避免了类似于c/c++中不慎在&&和||后的表达式中加入++/--运算符,而实际程序运行却产生超出预期的效果,满屏查错却迟迟无法解决。
条件1 or 条件2 #条件1为真时,不判断条件2
条件3 and 条件4 #条件3为假时,不判断条件4
字符格式化输出 %s %d %f
深浅拷贝
浅拷贝 最简单的记忆方法就是,只拷贝最外层的容器。
深拷贝 就是拷贝出一份副本。
对序列执行切片操作时,返回的切片都是副本。但是浅拷贝。
1 import copy 2 3 names = [1, 2, 3, [5, 6]] 4 5 n = names 6 m = names[:] # slicing 7 k = copy.copy(names) # shallow copy 8 # k2 = names.copy() 9 j = copy.deepcopy(names) # deep copy 10 11 print(n is names, n == names) 12 print(m is names, m == names) 13 print(j is names, j == names) 14 print(k is names, k == names) 15 16 print(j is m, m is k, j is k) 17 print(j == m, m == k, j == k) 18 19 names[3][0] = 7 20 print(k, j) 21 print(id(names), id(n), id(m), id(k)) 22 23 for a in names: 24 print(id(a)) 25 26 for a in k: 27 print(id(a))
相关文章移步这里吧:Python的深拷贝与浅拷贝
之前有困惑:既然copy()是浅拷贝,k当中存储的内存地址和names所存储的内存地址相同,为什么k is names返回了False呢?
因为k是创建的新的对象,在内存中开辟出一块内存用来存储与names相同的内存地址,这块内存的地址和names并不一样,所以k is names返回了False。
只有在两个变量指向同一个内存地址时,这两者使用is关键字才会返回True,这时其中一个变量名其实只是给之前开辟出的内存块地址起了别名而已。