網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
1.變量的賦值操作
只是多生成了一個(gè)變量,實(shí)際上還是指向同一個(gè)對(duì)象
# -*- coding: utf-8 -*-
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對(duì)象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
# 變量的賦值
cp1 = Computer(cpu='CPU', disk='DISK') # 創(chuàng)建CPU類的實(shí)例對(duì)象
cp2 = cp1
# 變量的賦值,一個(gè)對(duì)象的實(shí)例采用兩個(gè)變量存儲(chǔ),實(shí)際上還是指向一個(gè)對(duì)象
print(cp1, id(cp1))
print(cp2, id(cp2))
賦值(=),就是創(chuàng)建了對(duì)象的一個(gè)新的引用,修改其中任意一個(gè)變量都會(huì)影響到另一個(gè)。
2.淺拷貝
Python拷貝一般都是淺拷貝,拷貝時(shí),對(duì)象包含的子對(duì)象內(nèi)容不拷貝,因此,源對(duì)象與拷貝對(duì)象會(huì)引用同一個(gè)子對(duì)象
# -*- coding: utf-8 -*-
import copy
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對(duì)象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
cpu = CPU() # 創(chuàng)建一個(gè) CPU 類的實(shí)例對(duì)象
disk = Disk() # 創(chuàng)建一個(gè)Disk 類對(duì)象
computer = Computer(cpu, disk) # 創(chuàng)建一個(gè)Computer類的實(shí)例對(duì)象
# 淺拷貝
print(cpu)
print(disk)
computer2 = copy.copy(computer) # 子對(duì)象不拷貝
print(computer, computer.cpu, computer.disk)
print(computer2, computer2.cpu, computer2.disk)
# 類的淺拷貝:
# Python的拷貝一般都是淺拷貝,拷貝時(shí),對(duì)象包含的子對(duì)象內(nèi)容不拷貝
# 因此,源對(duì)象與拷貝對(duì)象會(huì)引用同一個(gè)子對(duì)象
淺拷貝:創(chuàng)建一個(gè)新的對(duì)象,但它包含的是對(duì)原始對(duì)象中包含項(xiàng)的引用
(如果用引用的方式修改其中一個(gè)對(duì)象,另外一個(gè)也會(huì)修改改變)
哪些是淺拷貝:
{1,完全切片方法;2,工廠函數(shù),如list();3,copy模塊的copy()函數(shù)}
3.深拷貝
使用copy模塊的deepcopy函數(shù),遞歸拷貝對(duì)象中包含的子對(duì)象,源對(duì)象和拷貝對(duì)象所有的子對(duì)象也不相同
# -*- coding: utf-8 -*-
import copy
class CPU:
pass
class Disk:
pass
class Computer:
def __init__(self, cpu, disk): # 給對(duì)象的實(shí)例屬性進(jìn)行初始化
self.cpu = cpu
self.disk = disk
cpu = CPU() # 創(chuàng)建一個(gè) CPU 對(duì)象
disk = Disk() # 創(chuàng)建一個(gè)硬盤類對(duì)象
computer = Computer(cpu, disk) # 創(chuàng)建一個(gè)計(jì)算機(jī)類對(duì)象
# 深拷貝
computer1 = copy.deepcopy(computer)
print(computer, computer.cpu, computer.disk)
print(computer1, computer1.cpu, computer1.disk)
# 類的深拷貝
# 使用copy模塊的deepcopy函數(shù),遞歸拷貝對(duì)象中包含的子對(duì)象
# 源對(duì)象和拷貝對(duì)象所有的子對(duì)象也不同
深拷貝:創(chuàng)建一個(gè)新的對(duì)象,并且遞歸的復(fù)制它所包含的對(duì)象。
修改其中一個(gè),另外一個(gè)不會(huì)改變。因此,新對(duì)象和原對(duì)象沒(méi)有任何關(guān)聯(lián)。
例如:{copy模塊的deepcopy()函數(shù)}
4.總結(jié)
最直觀的理解就是:
1.淺拷貝,拷貝的程度淺,只拷貝原數(shù)據(jù)的首地址,然后通過(guò)原數(shù)據(jù)的首地址,去獲取內(nèi)容。
2.深拷貝,拷貝的程度深,自己新開辟了一塊內(nèi)存,將被拷貝內(nèi)容全部拷貝過(guò)來(lái)了;
原文鏈接:https://aweia.blog.csdn.net/article/details/125559770
相關(guān)推薦
- 2023-02-25 GoLang并發(fā)編程中條件變量sync.Cond的使用_Golang
- 2022-12-14 Android?liveData與viewBinding使用教程_Android
- 2022-04-08 Unity?UGUI?按鈕綁定事件的?4?種方式匯總_C#教程
- 2023-01-27 解決Pycharm模塊安裝慢問(wèn)題的兩種方法_python
- 2022-03-26 .NET?6中使用DateOnly和TimeOnly類型_ASP.NET
- 2022-04-27 Android?WebRTC?對(duì)?AudioRecord?的使用技術(shù)分享_Android
- 2022-05-22 在Centos?8.0中安裝Redis服務(wù)器的教程詳解_Redis
- 2022-04-02 docker建立私有倉(cāng)庫(kù)的過(guò)程_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- 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)證過(guò)濾器
- 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)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支