網(wǎng)站首頁 編程語言 正文
1.變量的賦值操作
只是多生成了一個(gè)變量,實(shí)際上還是指向同一個(gè)對象
# -*- coding: utf-8 -*-
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
# 變量的賦值
cp1 = Computer(cpu='CPU', disk='DISK') # 創(chuàng)建CPU類的實(shí)例對象
cp2 = cp1
# 變量的賦值,一個(gè)對象的實(shí)例采用兩個(gè)變量存儲,實(shí)際上還是指向一個(gè)對象
print(cp1, id(cp1))
print(cp2, id(cp2))
賦值(=),就是創(chuàng)建了對象的一個(gè)新的引用,修改其中任意一個(gè)變量都會影響到另一個(gè)。
2.淺拷貝
Python拷貝一般都是淺拷貝,拷貝時(shí),對象包含的子對象內(nèi)容不拷貝,因此,源對象與拷貝對象會引用同一個(gè)子對象
# -*- coding: utf-8 -*-
import copy
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
cpu = CPU() # 創(chuàng)建一個(gè) CPU 類的實(shí)例對象
disk = Disk() # 創(chuàng)建一個(gè)Disk 類對象
computer = Computer(cpu, disk) # 創(chuàng)建一個(gè)Computer類的實(shí)例對象
# 淺拷貝
print(cpu)
print(disk)
computer2 = copy.copy(computer) # 子對象不拷貝
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# 類的淺拷貝:
# Python的拷貝一般都是淺拷貝,拷貝時(shí),對象包含的子對象內(nèi)容不拷貝
# 因此,源對象與拷貝對象會引用同一個(gè)子對象
淺拷貝:創(chuàng)建一個(gè)新的對象,但它包含的是對原始對象中包含項(xiàng)的引用
(如果用引用的方式修改其中一個(gè)對象,另外一個(gè)也會修改改變)
哪些是淺拷貝:
{1,完全切片方法;2,工廠函數(shù),如list();3,copy模塊的copy()函數(shù)}
3.深拷貝
使用copy模塊的deepcopy函數(shù),遞歸拷貝對象中包含的子對象,源對象和拷貝對象所有的子對象也不相同
# -*- coding: utf-8 -*-
import copy
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
cpu = CPU() # 創(chuàng)建一個(gè) CPU 對象
disk = Disk() # 創(chuàng)建一個(gè)硬盤類對象
computer = Computer(cpu, disk) # 創(chuàng)建一個(gè)計(jì)算機(jī)類對象
# 深拷貝
computer1 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer1, computer1.cpu, computer1.disk)
# 類的深拷貝
# 使用copy模塊的deepcopy函數(shù),遞歸拷貝對象中包含的子對象
# 源對象和拷貝對象所有的子對象也不同
深拷貝:創(chuàng)建一個(gè)新的對象,并且遞歸的復(fù)制它所包含的對象。
修改其中一個(gè),另外一個(gè)不會改變。因此,新對象和原對象沒有任何關(guān)聯(lián)。
例如:{copy模塊的deepcopy()函數(shù)}
4.總結(jié)
最直觀的理解就是:
1.淺拷貝,拷貝的程度淺,只拷貝原數(shù)據(jù)的首地址,然后通過原數(shù)據(jù)的首地址,去獲取內(nèi)容。
2.深拷貝,拷貝的程度深,自己新開辟了一塊內(nèi)存,將被拷貝內(nèi)容全部拷貝過來了;
原文鏈接:https://aweia.blog.csdn.net/article/details/125559770
相關(guān)推薦
- 2023-07-30 vscode自定義用戶代碼片段
- 2023-07-16 uniapp 中 uni.navigateTo跳轉(zhuǎn)其他頁面 并且?guī)?shù)
- 2023-08-16 uniapp中v-model數(shù)據(jù)無法讀取問題 failed for prop “value“
- 2022-11-16 Kotlin擴(kuò)展方法超詳細(xì)介紹_Android
- 2022-11-09 linphone-sdk-android版本號生成解析_Android
- 2023-06-16 Visual?Studio?如何創(chuàng)建C/C++項(xiàng)目問題_C 語言
- 2022-12-04 React?Native自定義Android的SSL證書鏈校驗(yàn)_React
- 2022-04-16 WPF框架Prism中區(qū)域Region用法介紹_實(shí)用技巧
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支