IDEA 对is进行了特殊处理,原来小整数(-5·256)应该为false
相关代码
# ==与is之小整数问题 a = 1000 b = 1000 print(a==b) # IDEA 对is进行了特殊处理,原来小整数(-5·256)应该为false print(a is b) # ==与is之对象问题 c=[1,2] d=[1,2] print(c==d) # false print(c is d)
对于基本数据类型深浅赋值没有啥区别,为了体现深浅赋值的区别,这里我们以嵌套list为例;
浅复制:重新开辟了一个空间,将地址赋给克隆对象,但是新空间中的引用地址还是源空间的,并没有创建新的;
深复制:重新开辟空间的同事,将空间内部的引用地址对应的对象也拷贝了一份,引用地址也就变了;
结论:深复制更耗内存,但是因为空间是独立了,在特别的应用场景会被用到;
图解:
代码:
import copy list1=[[1,2],[3,4]] list2 = copy.copy(list1) # 浅赋值 print(id(list1)) print(id(list2)) print(list1 is list2) print(id(list1[0])) print(id(list2[0])) print(list1[0] is list2[0]) # 39805448 # 44905864 # False # 44905800 # 44905800 # True list3 = copy.deepcopy(list1) print(id(list1)) print(id(list3)) print(list1 is list3) print(id(list1[0])) print(id(list3[0])) print(list1[0] is list3[0]) # 39805448 # 45004104 # False # 44905800 # 36063048 # False
5-4 4的源码 0000 0100 -4的源码 1000 0100 反码 1111 1011 补码=反码+1 1111 1011+ 0000 0001 1111 1100 5的源码 0000 0101 5-4 0000 0101+ 1111 1100 ------------------- 0000 0001 所以最后的结果是1
Python中命名规范问题:
xx
普通的变量
_x
使用from 模块 import * 无法导入
__x
私有属性,方法
名字重整:
__age
_类名__age
__xx__:
魔法方法
自定义的方法避免使用这种形式
x_:
避免变量名字冲突
被装饰器装饰的私有变量可以被外界访问
相关代码
装饰器使用方式一:
""" property:简化私有属性的访问方式 """ class Student(): def __init__(self,name,age): self.name = name self.setAge(age) def getAge(self): return self.__age def setAge(self,age): if isinstance(age,int): self.__age = age else: raise TypeError('年龄必须是int类型') age = property(getAge,setAge) stu = Student('aaa',10) # stu.setAge(20) stu.age = 20 # print(stu.getAge()) print(stu.age)
装饰器使用方式二:
""" 装饰器 """ class Student(): def __init__(self,name,age): self.name = name self.__age = age @property def xxx(self): return self.__age @xxx.setter def xxx(self,age): if isinstance(age,int): self.__age = age else: raise TypeError('年龄必须是int类型') stu = Student('学生1',10) #设置年龄 stu.__age = 20 print(stu.__age) list1 = [x for x in range(100) if x % 2 == 0] print(list1)
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有