x为假,not X为真,if not X执行;
在python中None,False,空字符串,空列表,空字典,空元组都相当于False,X是他们,not x会返回true
if not X=if x is +False
比如:if X is None=if not x
is 与==的区别:
is:引用对象是否一样,通过引用id比较
==:值是否相等,通过值比较
比如:
x=[1,2,3]
y=[1,2,3]
x is y//false
x==y//true
X is None 不等于X==None
深拷贝与浅拷贝:
不可变对象:一旦创建就不可修改的对象,包括字符串、元组、数字
可变对象:可以修改的对象,包括列表、字典。
1,切片可以应用于:列表、元组、字符串,但不能应用于字典。
2,深浅拷贝,既可应用序列(列表、元组、字符串),也可应用字典。
一句话就是,不可变类型,不管是深拷贝还是浅拷贝,地址值和拷贝后的值都是一样的。
对于可变类型:
= 浅拷贝:值相等,地址相等
copy浅拷贝:值相等,地址不相等
deepcopy深拷贝:值相等,地址不相等
copy浅拷贝,没有拷贝子对象,所以原始数据改变,子对象会改变
深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变
比如:
>>> import copy
>>> d=copy.deepcopy(alist)
dd=copy.copy(alist)
>>> print alist;print d dd
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]始终没有改变
[1,2,3,['a','b']
>>> alist.append(5)
>>> print alist;print d dd
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]始终没有改变
[1,2,3,['a','b'],5]
>>> alist[3]
['a', 'b']
>>> alist[3].append("ccccc")
>>> print alist;print d dd
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']] 始终没有改变
[1,2,3['a','b','cccc']]子对象被改变了