1、Python的特点和优点?
可解释、开源、动态特性、简洁明了、面向对象(可开动碱面)
详细特点可查看:https://data-flair.training/blogs/python-tutorial/
2、深拷贝、浅拷贝和直接赋值的区别?
1)深拷贝,把一个对象复制给另外一个对象,
2)
import copy a = [1, 2, 3, [4, 5]] print(f"原数组a:{a}, a的地址:{id(a)}") b = copy.deepcopy(a) print(f"深拷贝b:{b}, b的地址:{id(b)}") c = copy.copy(a) print(f"浅拷贝c:{c}, c的地址:{id(c)}") d = a print(f"直赋值d:{d}, d的地址:{id(d)}") print("\n第一次修改 用=修改\n") a[0]=6 print(f"原数组a:{a}, a的地址:{id(a)}") print(f"深拷贝b:{b}, b的地址:{id(b)}") print(f"浅拷贝c:{c}, c的地址:{id(c)}") print(f"直赋值d:{d}, d的地址:{id(d)}") print("\n第二次修改 内层元素添加append一个数\n") a[3].append(9) print(f"原数组a:{a}, a的地址:{id(a)}") print(f"深拷贝b:{b}, b的地址:{id(b)}") print(f"浅拷贝c:{c}, c的地址:{id(c)}") print(f"直赋值d:{d}, d的地址:{id(d)}") print("\n第三次修改 外层元素添加append一个数\n") a.append(10) print(f"原数组a:{a}, a的地址:{id(a)}") print(f"深拷贝b:{b}, b的地址:{id(b)}") print(f"浅拷贝c:{c}, c的地址:{id(c)}") print(f"直赋值d:{d}, d的地址:{id(d)}")
结果:
"D:\Program Files\Python\PytestProject\Scripts\python.exe" C:/Users/CXM/PycharmProjects/untitled2/test.py 原数组a:[1, 2, 3, [4, 5]], a的地址:1952842345288 深拷贝b:[1, 2, 3, [4, 5]], b的地址:1952843082120 浅拷贝c:[1, 2, 3, [4, 5]], c的地址:1952843201736 直赋值d:[1, 2, 3, [4, 5]], d的地址:1952842345288 第一次修改 用=修改 原数组a:[6, 2, 3, [4, 5]], a的地址:1952842345288 深拷贝b:[1, 2, 3, [4, 5]], b的地址:1952843082120 浅拷贝c:[1, 2, 3, [4, 5]], c的地址:1952843201736 直赋值d:[6, 2, 3, [4, 5]], d的地址:1952842345288 第二次修改 内层元素添加append一个数 原数组a:[6, 2, 3, [4, 5, 9]], a的地址:1952842345288 深拷贝b:[1, 2, 3, [4, 5]], b的地址:1952843082120 浅拷贝c:[1, 2, 3, [4, 5, 9]], c的地址:1952843201736 直赋值d:[6, 2, 3, [4, 5, 9]], d的地址:1952842345288 第三次修改 外层元素添加append一个数 原数组a:[6, 2, 3, [4, 5, 9], 10], a的地址:1952842345288 深拷贝b:[1, 2, 3, [4, 5]], b的地址:1952843082120 浅拷贝c:[1, 2, 3, [4, 5, 9]], c的地址:1952843201736 直赋值d:[6, 2, 3, [4, 5, 9], 10], d的地址:1952842345288 Process finished with exit code 0
1.浅拷贝:外层添加元素时,浅拷贝不会随原列表变化而变化;内层添加元素时,浅拷贝才会变化。
2.深拷贝:无论原列表如何变化,深拷贝都保持不变。
3.直接赋值:赋值对象随着原列表一起变化。