python 拷贝,作用域,pyoperty

  • 一、"is" 与 "=" 的区别
    • 1. is判断的是a对象是否就是b对象,是通过id来判断的。判断的是不是一个地址,比较两个引用是否指向了同一个对象
    • 2. = 判断的是两个变量的内容(值)是否相等,
    • 3.两个无引用关系的列表(或字典或元组)的内容即使相同,地址也不相同,两个字符串(或数值),内容相同,地址相同
  • 二、浅拷贝和深拷贝
    • 1.好处:减少内存使用,对数据进行备份,预防不正确清除或修改数据
    • 2.import copy
      • copy.copy(拷贝的内容) 浅拷贝
      • copy.deepcopy(拷贝的内容) 深拷贝
    • 3.浅拷贝
      • 1.产生新的地址保存内容
      • 2.内容
        • 1.改变原数据的字符串(整数) 地址也会改变,新数据不变
        • 2.改变原数据的列表(字典) 地址不会改变,新数据也改变
        • 3.切片也为浅拷贝,字典自带的copy方法为浅拷贝
    • 4.深拷贝
      • 1.产生新的地址保存内容
      • 2.原数据内容改变,新数据也不变
    • 5.如果进行元组拷贝,元组内容是纯原子类型(数值,字符串)则不能进行拷贝(拷贝后地址一样)
      • 元组内容有非原子类型(列表,字典) 则能进行拷贝
    • 6.总结
      • 1.Python中对象的赋值都是进行对象引用(内存地址)传递
      • 2.使用copy.copy(),可以进行对象的浅拷贝,它复制了对象,但对于对象中的元素,依然使用原始的引用.
      • 3.如果需要复制一个容器对象(例如列表,),以及它里面的所有元素(包含元素的子元素),可以使用copy.deepcopy()进行深拷贝
      • 4.对于非容器类型(如数字、字符串、和其他'原子'类型的对象(元组))没有被拷贝一说
      • 5.如果元祖变量只包含原子类型对象,则不能拷贝。
  • 三、进制,位运算
    • 1.python中二进制 以0b 开头如,"0b101",八进制0o开头,十六进制0x开头
    • 2.转换
      • 1.二进制转十进制  int("0b10112",2)  -->23
      • 2.八进制转十进制  int("0o27",8)  -->23
      • 3.十六进制转十进制 int("0xa8",16)  -->168
      • 4.十进制转二进制  bin(10)  -->"0b1010"
      • 5.十进制转八进制  oct(100)  -->"0o144"
      • 6.十进制转十六进制 hex(100)  -->"0x64"
    • 3.原码,反码,补码
      • 数字在计算机中是以二进制补码的形式保存的,计算时是以补码运算的,符号位是最前面的那一位,0为正,1为负
      • 正数的原码=反码=补码
      • 负数:反码=符号位不变,其他位取反 0变1,1变0
      • 补码=反码+1
      • 补码转码原码:符号位不变,数据位取反,尾数+1
    • 4.位运算
      • 1.左移 数值<<位数  左移几位就是   数值*2的几次方
      • 2.右移 数值>>位数  右移几位就是   数值/2的几次方(整数)
      • 3.按位于 & 全1为1,否则为0
      • 4.按位或 | 有1就为1,
      • 5.按位异或 ^ 不同为1,相同为0
  • 四,作用域
    • 1.Python使用叫做命名空间的东西来记录变量的轨迹。命名空间是一个字典(dictionary) ,它的键就是变量名,它的值就是那些变量的值。
    • 2.命名空间
      • 1、每个函数都有着自已的命名空间,叫做局部命名空间,它记录了函数的变量,包括函数的参数和局部定义的变量。
      • 2、每个模块拥有它自已的命名空间,叫做全局命名空间,它记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量。
      • 3、还有就是内置命名空间,任何模块均可访问它,它存放着内置的函数和异常。
    • 3.作用域:局部变量和全局变量,之所有称之为局部、全局,就是因为他们的自作用的区域不同,这就是作用域。
      • 注意:类没有作用域
    • 4.locals() 查看当前局部命名空间中的可以使用的变量,函数,类,返回一个字典
    • 5.globals() 查看当前全局命名空间中可以使用的变量,函数,类,返回一个字典
    • 6.python中使用变量,函数,类遵循 L-E-G-B 规则 来查找命名空间中的该变量,函数,类
      • 1.L locals 局部命名空间  (函数内的名字空间)  函数的参数也属于命名空间内的变量.
      • 2.E enclosing function 外部嵌套函数的命名空间 (闭包)
      • 3.G globals 全局命名空间 (函数定义所在模块(文件)的名字空间)
      • 4.B builtins  内建模块的命名空间
  • 五、私有化
    • 1、xx: 公有变量
      • _x: 单前置下划线,受保护的变量
      • __xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到),私有的
      • __xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:__init__ , __ 不要自己发明这样的名字
      • xx_:单后置下划线,用于避免与Python关键词的冲突
    • 2.
      • 1.通过 from 模块 import * 导入模块 ,不能使用模块中以单前置下划线的变量,函数,类和双前置下划线的私有
      • 2.通过 from 模块 import _name,__age ,可以使用单前置下划线的变量,函数,类和双前置下划线的私有
      • 3.通过 import 模块,可以使用单前置下划线的变量,函数,类和双前置下划线的私有
    • 3.类中定义单前置下划线的属性,方法,继承可以使用,类外可以直接访问
      • 类中定义双前置下划线的属性,方法,继承不可以使用,类外不可以直接访问
  • 六、属性property
    • 1.类中通过添加get和set方法,获取和修改私有属性值
    • 2.在1的基础上,在类中添加属性 属性=property(get方法,set方法)   property中方法不加括号get在前,set在后
      • 在类外就可以通过,类对象.属性 获取私有属性值, 和类对象.属性=值 修改私有属性值
    • 3.在类中定义
      • @property
      •     def 属性(self):
      •         return self.__属性
      • @属性.setter():
      • def 属性(self,值):
      •     self.__属性=值
      • 使用:
        • 在类外就可以通过,类对象.属性 获取私有属性值, 和类对象.属性=值 修改私有属性值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值