本文共 837 字,大约阅读时间需要 2 分钟。
python中的3个常见操作符is、id、==,三个的使用方法和应用场景不近相同,有各自适合的应用场景
is:用于比较两个对应是否是同一个引用
==:用于比较两个之是否相同id:用于获取对象的内存地址id(5)1492768624a = 4b = 4a == bTruea is bTruea = 257b = 257a == bTruea is bFalse
两个人数值对象都是4的时候他们的值相等,他们的引用也相同,但是当两个对象值为257的时候,他们的引用就不相同了,为什么出现这种原因?
这是因为python的内存管理机制,对于数值而言,在[-5,257)之间的数值对象他们共用一个对象,即都指向一个内存地址。a = 4b = 4id(a)1492768608id(b)1492768608
可见在内存中的地址是一样的,一个对象,[-5,257)之间的数值是已经建好的,即使我们所谓的创建,对于程序而言也不是创建只不过增加了一个引用。
深拷贝、浅拷贝 深拷贝是在内存中在创建一个相同的对象,而浅拷贝是给对象增加一个引用,用一个比喻来形容:一个txt文本,在桌面创建快捷方式是浅拷贝,复制这个txt文件是深拷贝,那么删除一个快捷方式不会影响到原文件,但是删除一个原文件的复制文件,那么就是真的删除了一个文件。 python中copy模块提供了对象拷贝的深拷贝和浅拷贝模式,分别是copy.deepcopy()、copy.copy()。a = 'dsasdsd'b = copy.copy(a)c = copy.deepcopy(a)id(a)80379424id(b)80379424id(c)80379424
上面案例中创建了一个字符串对象a,通过浅拷贝和深拷贝分别创建了另两个对象bc,那么他们的内存地址为什么是一样的。
这是受益于python的共享机制,对于不可变的单个字符、不可变字符串是共享对象,相同的对象是指向一个内存地址。 更对机制等待各位深入。转载地址:http://orgix.baihongyu.com/