深拷贝、浅拷贝
- 浅拷贝是指对对象的引用进行复制,即拷贝后的对象和原始对象共享同一个内存地址。如果对原始对象进行修改,拷贝后的对象也会随之改变。
- 深拷贝则是对对象的内容进行真正的复制,即拷贝后的对象和原始对象拥有各自独立的内存地址。对原始对象进行修改不会影响到拷贝后的对象。
import copy
original_dict = {"key1": 1, "key2": [2, 3]}
shallow_copied_dict = original_dict.copy()
shallow_copied_dict["key1"] = 4
shallow_copied_dict["key2"][0] = 5
print("原始字典: ", original_dict)
print("浅拷贝字典: ", shallow_copied_dict)
print("---------------------------")
deep_copied_dict = copy.deepcopy(original_dict)
deep_copied_dict["key1"] = 6
deep_copied_dict["key2"][0] = 7
print("原始字典: ", original_dict)
print("深拷贝字典: ", deep_copied_dict)
import copy
original_list = [1, 2, [3, 4]]
shallow_copied_list = copy.copy(original_list)
shallow_copied_list[2][0] = 5
shallow_copied_list[1] = 100
print("原始列表: ", original_list)
print("浅拷贝列表: ", shallow_copied_list)
print("修改子列表对象,原始列表改变了")
print('----------------------')
deep_copied_list = copy.deepcopy(original_list)
deep_copied_list[2][0] = 6
deep_copied_list[1] = 100
print("原始列表: ", original_list)
print("深拷贝列表: ", deep_copied_list)
print("深拷贝,修改子列表对象,原始列表不变")
python变量前的单下划线(伪私有变量)和双下划线(真私有变量)
class MyName:
_name = "111"
__name = "222"
def get_name(self):
return self.__name
def set_name(self, s):
self.__name = s
print(MyName._name)
print(MyName.__name)