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晓码阁 版权所有