python 语言基础
数据类型
python中主要有6种标准数据类型,分为可变和不可变两类。
不可变类型:该数据类型对象所指定内存中的值不可以被改变。
(1)、在改变某个对象的值时,由于其内存中的值不可以被改变,所以,会把原来的值复制一份再进行改变,这样就会计算机会开辟一段新的内存空间来存储新的值。
可变类型:该数据类型的对象所指定的地址上面的值可以被改变。
(1)、变量被改变后,其所指向的内存地址上面的值,直接被改变,没有发生复制行为,也没有发生开辟新的内存地址行为,不会重新开辟空间。
深拷贝,浅拷贝和赋值的区别
首先,需要明确一点,浅拷贝和深拷贝之间的区别只适用于容器对象(包含其他对象的对象,如列表或类实例)。对于非容器对象没有区别,都是对象拷贝,相当于重新赋值,生成一个新的对象。
敲重点,面试时,下边三句回答即可!
简单的来说,在有指针的情况下,浅拷贝只是增加了一个指针指向已经存在的内存。
深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。
应用copy.copy浅拷贝、copy.deepcopy深拷贝功能的时候,会根据当前拷贝的数据类型,可变类型和不可变类型有不同的处理方式。
(1)、对于不可变对象(数字、字符串、元祖),浅拷贝和深拷贝是没有区别的。
(2)、对于可变对象(列表、字典、集合),浅拷贝第一次层引用,而深拷贝是完全拷贝。
赋值—对象赋值实际上是简单的对象引用
比较简单,赋值就是对物体进行贴标签操作,作用于同一物体。
赋值:值不变,地址不变;
copy浅拷贝和deepcopy深拷贝:值相等,地址不相等;
摘自原文链接
self的含义
摘自原文链接
self是类的实例,而非类
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
执行结果如下
<__main__.Test object at 0x000000000284E080>
<class '__main__.Test'>
从上面的例子中可以很明显的看出,self代表的是类的实例。而self.__class__则指向类。
总结
self在定义时需要定义,但是在调用时会自动传入。
self的名字并不是规定死的,但是最好还是按照约定是用self
self总是指调用时的类的实例。