二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

一、

(1)is  ==  区别

==:用来判断a和b指向的空间里的内容是否一样(比较的值)(a==b)

is:用来判断a和b是否指向的是同一块内存空间(a   is  b)

id(a)  ——查看a的内存地址

总结:==判断两个变量的值(也就是比较两个对象是否相等,是比较的值);

          is判断两个变量的内存地址是否一致,返回True/False (也就是比较两个引用是否指向了同一个对象,是地址引用的比较)。

(2)在python里有一个小整数常量池

数据量小的时候,在-5到256之间的时候,因为大部分我们是在做小数据的运算,所以python给我们做了个优化,也就是小整型

缓存池,不用去开辟空间了,在内存上做了一个优化。

如果是大数据的运算,那为了做到数据的完整和准确,所以单独开辟空间。

(3)字符串常量

在python中字符串还有一个名字叫做字符串常量,也就是其内容不能改变。常量就是内容不能改变的,变量就是内容可以改变

的,那字符串在内存中的存储,就是按常量的形式存储的。

二、深拷贝与浅拷贝(爬虫可能会用到)

1、列表是一个可变的数据类型,另外一种叫法就是引用数据类型

当a的值发生变化时,b的值也是会发生变化:

 

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

2、数字类型与字符串类型,元组类型都是不可变的数据类型,另外一种叫法:值数据类型。

  当a的值发生变化时,b的值不会发生变化

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

总结:浅拷贝、深拷贝

记得导入包 import copy

1、对于单层拷贝时,只是列表时(可变的),深拷贝与浅拷贝没有区别,都显示原先的值,不显示修改的值。

      a修改值,b不改变,拷贝完,b还是a的原值,不修改

使用copy.copy进行浅拷贝 b没有变化

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

使用copy.deepcopy进行深拷贝:b也没有发生变化

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

2、比如列表元组拷贝,[ [ ] ]、([ ])形式、只要嵌套形式就有区别,且只改变嵌套的值有区别:

      浅拷贝会拷贝引用,a嵌套的值改变,b也改变,但深拷贝c不会改变值,还是a的原值。

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

在嵌套的外边a添加值,b、c拷贝的内容一样,不会改变,还是原值

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用

3、只有改变嵌套里的值,拷贝的内容才会有所区别:

浅拷贝会拷贝引用,a嵌套的值改变,b也会跟着改变

但深拷贝c不会改变值,还是a的原值。

二十七、is 、==号的区别以及 浅拷贝与深拷贝的使用