1、“is”和“==”有什么区别?
is 是判断是两个变量是否为同一个对象,判断的是变量的引用,比较对象的引用id。
== 是判断两个变量的值、数据类型是否相等。
2、可变数据类型与不可变数据类型有哪些?
可变数据类型:列表(list)、字典(dict)、集合(set)
不可变数据类型:整数(int)、浮点数(float)、布尔(bool)、字符串(str)、元组(tuple)
3、实例方法、静态方法和类方法有什么区别?
实例方法:在类中接受 self 参数。
静态方法:使用@staticmethod装饰器。
类方法:使用@classmethod装饰器,cls参数。
4、Python是按引用调用还是按值调用?
不可变变量是按值调用,可变变量是按引用调用。
按值调用例子。当在函数内部修改时,name的值在函数外部不会发生变化。name的值已分配给内存中该函数作用域的新块。
name = 'chr'
def add_chars(s):
s += 'is'
print(s)
add_chars(name)
print(name) #=> chris#=> chr
按引用调用例子。函数外部定义的列表在函数内部的修改是如何影响到函数外部的。函数中的参数指向内存中存储li值的原始块。
li = [1,2]
def add_element(seq):
seq.append(3)
print(seq)
add_element(li)
print(li) #=> [1, 2, 3]#=> [1, 2, 3]
5、类中的“self”指的是什么?
self 表示引用类本身的实例。在类中,就可以直接使用 self 调用类的属性、方法。
6、深拷贝与浅拷贝区别
深拷贝、浅拷贝主要是对可变变量影响较大。
浅拷贝:会创建一个新的变量,但是该变量存的是原始对象的引用,如果修改原始对象,该变量也会发生变化。
深拷贝:会创建一个新的变量,会在内存中重新拷贝一份数据,变量存新数据的引用,修改原数据,不会对新变量产生影响。