拷贝及运算符

浅拷贝和深拷贝

拷贝需要导入 copy模块

1、赋值:简单地拷贝对象的引用,两个对象的id 相同
2、浅拷贝:创建一个新的组合对象,这个新对象与原对象 共享 内存中的子对象。
3、深拷贝:创建一个新的组合对象,同时递归地拷贝所有子对象,新的组合对象与原对象没有任何关联。

浅拷贝

浅拷贝:是指创建一个新的对象,其内容是原对象中元素的引用。(拷贝组合对象,不拷贝子对象)

方法:copy.copy()

浅拷贝 等价于 切片[:]

使用浅拷贝时,子对象共用(list1 的子对象改变时,list2 的子对象也会改变

1
2
3
4
5
6
7
8
9
import copy
list1 = [10, 20, 30, [40, 50]]

list2=copy.copy(list1)
print(list2) # [10, 20, 30, [40, 50]]

# 修改了list1的值,list2中的值也会跟着改变
list1[-1][0] = 60
print(list2) # [10, 20, 30, [60, 50]]

深拷贝

深拷贝:是指创建一个新的对象,递归的拷贝原对象所包含的子对象。

方法:copy.deepcopy()

深拷贝出来的对象与原对象没有任何关联。

1
2
3
4
5
6
import copy
list1 = [10, 20, 30, [40, 50]]

list2=copy.deepcopy(list1)
list1[-1][0] = 60
print(list2) # [10, 20, 30, [40, 50]]

对于不可变对象,当需要一个新的对象时,python 可能会返回已经存在的某个类型和值都一致的对象的引用。

这种机制并不会影响 两个对象 的相互独立性

布尔表达式

1.布尔对象只有两种取值: TrueFalse
2.布尔类型 True 真,也可以用 1 表示 False 假 也可以用 0 表示
3.字母之间的比较,是根据 ASCII 码 来比较的,a=97,A=65

比较运算符

==!=>>=<<=连接两个比较对象。

通过比较用算符判断表达式是否成立,成立则返回 True ,不成立则返回 False

1
2
print( 1 == 1)		# True
print( 1 != 1) # False

in 和 not in

使用 innot in 来判断元素是否在对象中

1
2
3
4
list1 = [10, 20, 30]

print(10 in list1) # True
print("10" not in list1) # True

逻辑运算符

使用 andor 来连接多个判断语句

  1. amdor 遵循 全真为真,一假为假 的规则。
  2. 如果有括号时,需要先判断括号内的部分。
  3. and , or , not 的优先级 not > and > or
1
2
print(1>2 and 2>1 or 3>20 and 5>4 or 6>5)	# True
print(1>2 and 2>1 or 3>20 and (5>4 or 6>5)) # False