# 1.指派操作
def print_fuzhi():
"""
指派操作中時間裡一份資料的引用,如果資料發生變化,所有的引用都發生變化
"""
a = {
"name": "alex",
"age": 18,
"gender": False,
"hobby": [1, 2, 3],
"other": {
"address": "chaoyangqu",
}
}
print("-" * 10 + "指派操作" + "-" * 10)
b = a
print(f"中繼資料的位址:{id(a), id(b)}")
print(f"深層對象的位址:{id(a['hobby']), id(b['hobby'])}")
b["name"] = "bob"
b["hobby"][0] = 10
b["hobby"].append(4)
b["other"]["school"] = "北大"
print(f"a:{a}")
print(f"b:{b}")
# 2.淺copy
def print_copy():
"""
淺拷貝拷貝位址
淺拷貝對于隻拷貝對象資料的第一層,其他層仍然是引用
"""
a = {
"name": "alex",
"age": 18,
"gender": False,
"hobby": [1, 2, 3],
"other": {
"address": "chaoyangqu",
}
}
print("-" * 10 + "淺拷貝" + "-" * 10)
from copy import copy
b = copy(a)
print(f"中繼資料的位址:{id(a), id(b)}")
print(f"深層對象的位址:{id(a['hobby']), id(b['hobby'])}")
b["name"] = "bob"
b["hobby"][0] = 10
b["hobby"].append(4)
b["other"]["school"] = "北大"
print(f"a:{a}")
print(f"b:{b}")
# 3.深拷貝
def print_deepcopy():
"""
深拷貝拷貝的是資料
深拷貝對于隻拷貝對象資料的所有層,資料完全隔離
"""
a = {
"name": "alex",
"age": 18,
"gender": False,
"hobby": [1, 2, 3],
"other": {
"address": "chaoyangqu",
}
}
print("-" * 10 + "深拷貝" + "-" * 10)
from copy import deepcopy
b = deepcopy(a)
print(f"中繼資料的位址:{id(a), id(b)}")
print(f"深層對象的位址:{id(a['hobby']), id(b['hobby'])}")
b["name"] = "bob"
b["hobby"][0] = 10
b["hobby"].append(4)
b["other"]["school"] = "北大"
print(f"a:{a}")
print(f"b:{b}")
print_fuzhi()
print_copy()
print_deepcopy()
"""
>>>
----------指派操作----------
中繼資料的位址:(140624057016560, 140624057016560)
深層對象的位址:(140624056103392, 140624056103392)
a:{'name': 'bob', 'age': 18, 'gender': False, 'hobby': [10, 2, 3, 4], 'other': {'address': 'chaoyangqu', 'school': '北大'}}
b:{'name': 'bob', 'age': 18, 'gender': False, 'hobby': [10, 2, 3, 4], 'other': {'address': 'chaoyangqu', 'school': '北大'}}
----------淺拷貝----------
中繼資料的位址:(140624056999200, 140624056999840) # 原對象的位址不一樣說明是拷貝的資料
深層對象的位址:(140624056103392, 140624056103392) # 深層對象的位址一樣說明是拷貝的位址
a:{'name': 'alex', 'age': 18, 'gender': False, 'hobby': [10, 2, 3, 4], 'other': {'address': 'chaoyangqu', 'school': '北大'}}
b:{'name': 'bob', 'age': 18, 'gender': False, 'hobby': [10, 2, 3, 4], 'other': {'address': 'chaoyangqu', 'school': '北大'}}
----------深拷貝----------
中繼資料的位址:(140624057016560, 140624056999440)
深層對象的位址:(140624056103392, 140624057377088)
a:{'name': 'alex', 'age': 18, 'gender': False, 'hobby': [1, 2, 3], 'other': {'address': 'chaoyangqu'}}
b:{'name': 'bob', 'age': 18, 'gender': False, 'hobby': [10, 2, 3, 4], 'other': {'address': 'chaoyangqu', 'school': '北大'}}
"""