文章目录
函数也是对象,内存底层分析
def test01():
print("Man")
test01()
c = test01
c()
Man
Man
变量的作用域(全局变量和局部变量)
a = 3
def test01():
b = 4
print(b)
a = 300
print(a)
test01()
print(b)
print(a)
Traceback (most recent call last):
File "C:/Users/admin/PycharmProjects/turtle/test.py", line 8, in <module>
print(b)
NameError: name 'b' is not defined
4
300
print(locals()) 打印输出的局部变量
局部变量和全局变量效率测试
参数的传递
从实参到形参的赋值操作。
对可变对象进行写操作,直接作用于原对象本身。
对不可变对象进行写操作,会产生一个新的对象空间,并用新的值填充这块空间。
可变对象:字典、列表、集合、自定义的对象等。
不可变对象:数字、字符串、元组、function等
传递可变对象的引用
传递参数是可变对象,实际传递的还是对象的引用。
a = [10,20]
print(id(a))
print(a)
def test01(m):
print(id(m))
m.append(300)
print(id(m))
test01(a)
print(a)
1780838125960
[10, 20]
1780838125960
1780838125960
[10, 20, 300]
传递不可变对象的引用
参数是不可变对象,实际传递的还是对象的引用。在赋值操作时,由于不可变对象无法修改,系统会新创建一个对象。
a = 100
def f1(n):
print("n:",id(n))
n=n+200
print("n:",id(n))
print(n)
f1(a)
print("a",id(a))
n: 140713297817072
n: 1785365939024
300
a 140713297817072
浅拷贝和深拷贝
copy()、deepcopy()
浅拷贝:不拷贝子对象的内容,只拷贝子对象的引用。
深拷贝:会连子对象的内存全部拷贝,对子对象的修改不会影响原对象。
#浅拷贝
import copy
a = [