学Python,用RPA

import copy
 a = [1,2,3,4,5]
 b = a #浅拷贝,a,b同时指向一个id,当其中一个修改时,另外一个也会被修改。
 c = copy.deepcopy(a) #深拷贝,c单独开辟一个id,用来存储和a一样的内容。
 d =a[:] #这样也是深拷贝。
 e = copy.copy(a) #当拷贝内容是可变类型时,那么就会进行深拷贝,如果是不可变类型时,那么就会进行浅拷贝。

注意:深拷贝指的是复制内容,单独开辟一个内存,浅拷贝指的是两个变量同时指向一个内存 ID。
私有化和 Property

class Test(object):
 def init(self):
 self.__num = 100
 @getNum.setter #等同步于 porperty(setNum,getNum)
 def setNum(self,num): #将self.__num的属性封装。
 self.__num = num
 @porperty #等于getNum = porperty(getNum) 默认的是getter方法。
 def getNum(self) #获取__num的值。
 return self.__num
 num = porperty(getNum,setNum) #使用关键字porperty将getNum和setNum方法打包使用,并将引用赋予属性num。
 t = Test()
 print(t.__num) #将会出错,表示输出私有属性,外部无法使用。
 t.__num = 200 #这里将会理解为添加属性 __num = 200,而不是重新赋值私有属性。
 print(t.__num) #这里输出的200是定义的属性__num,而不是self.__num。
 t.setNum(200) #通过set方法将私有属性重新赋值。
 t.getNum() #通过get方法获取__num的值。
 print(_Test__num) #私有属性其实是系统再私有属性前加上了一个_Test,就是一个下划线加类名。t.num = 300 #调用类属性num,并重新赋值,porperty会自动检测set方法和get方法,并将引用赋值给set方法。
 print(t.num) #输出类属性,并会自己检测使用get方法进行输出。class Test(object):
 def init(self):
 self.__num = 100
 @getNum.setter #等同步于 porperty(setNum,getNum)
 def setNum(self,num): #将self.__num的属性封装。
 self.__num = num
 @porperty #等于getNum = porperty(getNum) 默认的是getter方法。
 def getNum(self) #获取__num的值。
 return self.__num
 num = porperty(getNum,setNum) #使用关键字porperty将getNum和setNum方法打包使用,并将引用赋予属性num。
 t = Test()
 print(t.__num) #将会出错,表示输出私有属性,外部无法使用。
 t.__num = 200 #这里将会理解为添加属性 __num = 200,而不是重新赋值私有属性。
 print(t.__num) #这里输出的200是定义的属性__num,而不是self.__num。
 t.setNum(200) #通过set方法将私有属性重新赋值。
 t.getNum() #通过get方法获取__num的值。
 print(_Test__num) #私有属性其实是系统再私有属性前加上了一个_Test,就是一个下划线加类名。t.num = 300 #调用类属性num,并重新赋值,porperty会自动检测set方法和get方法,并将引用赋值给set方法。
 print(t.num) #输出类属性,并会自己检测使用get方法进行输出。


PS: num 前后没有下划线的是公有方法,_num 前边有一个下划线的为私有方法或属性,子类无法继承, 前边有两个下划线的 一般是为了避免于子类属性或者方法名冲突,无法在外部直接访问。前后都有双下划线的为系统方法或属性。后边单个下划线的可以避免与系统关键词冲突。