Python 再学习3
深拷贝和浅拷贝
浅拷贝:仅仅是拷贝了对象的在内存中的引用
深拷贝:在内存重新建个对象,将内容拷贝过来
== 和is
is比较两个引用是否指向通过各对象
==比较两个对象是否相等
浅拷贝:
其实就是一个赋值操作,将对象的引用传给一个变量。
除了一般的赋值之外我们还可以使用copy包中的copy函数来实行
深拷贝:
是对一个对象所有层次的拷贝
我们可以用copy包中的deepcopy实现:
对象属性的定义及访问
变量规则:
xx:共有变量
_x:单前置下划线,私有属性或方法。仅类对象和子类可以访问。Import导入包时不会被导入
__xx:双前置下划线,避免与子类中的属性明明冲突,无法在外部直接访问。子类也无法访问
__xx__:双前后下划线,用户命名空间的魔法对象或属性
xx_: 单后置下划线,用于避免与python关键字冲突
property和属性的访问
对于属性,想暴露出去的属性,我们还是用getter和setter的方法最好,保证封装性。
原始的方法:
使用property注解取代getter和setter:
python內建属性和函数
常用內建属性:
就是类中的自带的魔法属性
常用內建函数:
在启动python解释器的时候,python会自动加载默认的函数。
range:
数组生成器
使用:range(start,stop,step)
map:
根据提供的函数对指定序列做映射
map(function,sequence) -> list
eg:
filter:
会对指定的序列执行过滤操作
filter(function or None , sequence) ->list
eg:
reduce:
按照一定规则对参数序列中元素进行积累
reduce(function ,sequence[,initial]) ->value
eg:
中间的+当然也可以改成*或者别的负号,function是鸡肋规则,x表示上一次的值,y表示当前值。
这个函数在python2中是內建,在python3中放在了functools包中
sorted:
排序
sorted(iterable,cmp=None, key =None,reverse= False)
eg:
排序的都是iterable类型的对象