Python深拷贝与浅拷贝_python 赋值

Python深拷贝与浅拷贝_python 赋值深拷贝和浅拷贝不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值importcopya=1b=co

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

深拷贝和浅拷贝

不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值

import copy


a = 1
b = copy.copy(a)  # 浅拷贝a
c = copy.deepcopy(a)  # 深拷贝a
print(a is b)
print(a is c)

>>> True
>>> True

is比较的是二者的内存地址是否相同

 

浅拷贝

浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.copy(a)
print(a is b)
print(a[2] is b[2])

>>> a的内存地址 140369750660592
>>> b的内存地址 140369750677376
>>> False
>>> a[2]的内存地址 140369750677056
>>> b[2]的内存地址 140369750677056
>>> True

浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,
但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址

 

深拷贝

深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print('a的内存地址', id(a))
print('b的内存地址', id(b))
print(a is b)
print('a[2]的内存地址', id(a[2]))
print('b[2]的内存地址', id(b[2]))
print(a[2] is b[2])

>>> a的内存地址 140312626337184
>>> b的内存地址 140312626353968
>>> False
>>> a[2]的内存地址 140312626353648
>>> b[2]的内存地址 140312626337264
>>> False
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165841.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于安装空调的请示_searchmatch安装教程

    关于安装空调的请示_searchmatch安装教程dirsearch

    2022年9月1日
    5
  • 手把手教你如何使用kali破解wifi密码(图文教程)

    手把手教你如何使用kali破解wifi密码(图文教程)如何用kali破解WPA/WPA2加密方式的密码前期准备支持监听的网卡一张以及安装kali的VMwarekali官网kali是什么?——kali就是一个专门用于渗透行业的Linux发行版本,里面的工具非常丰富,本文就是建立在kali系统的支持之上的https://www.kali.org/get-kali/#kali-virtual-machines下载位置下载了vm文件后可以直接用VMware打开,开机后用户名:kali密码:kali正式开始查看已安装网卡airmon-n

    2022年6月5日
    100
  • C# delegate_sql case用法

    C# delegate_sql case用法委托从字面上理解就是一种代理,类似于房屋中介,由租房人委托中介为其租赁房屋。在C#语言中,委托则委托某个方法来实现具体的功能。委托是一种引用类型,虽然在定义委托时与方法有些相似,但不能将其称为方法。委托在使用时遵循三步走的原则,即定义声明委托、实例化委托以及调用委托。从数据结构来讲,委托是和类一样是一种用户自定义类型。委托是方法的抽象,它存储的就是一系列具有相同签名和返回回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。委托是C#语言中的一个特色,通常将委托分为命名方法委托

    2025年6月6日
    2
  • [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋…….

    [文字雲產生器] Tagxedo 把文字串成雲、變成畫,印在 T-Shirt、馬克杯、詩袋…….http://www.tagxedo.com/app.html有種東西叫「WordClouds」,就是把一堆文字依照不同的大小、顏色、角度與位置拼湊在一起,讓他變成像一朵雲一般、組合成各種不同的形狀。平常最成看到類似的創作應該是在T-Shirt或馬克杯上,用各種樣式組成不同形狀的文字雲,把想呈現的文字、地名或專有名詞寫在衣服上,看起來相當帥氣!如果你不是設計師卻想玩玩看Wor…

    2025年6月24日
    3
  • Verilog hdl与VHDL混用详解

    Verilog hdl与VHDL混用详解Veriloghdl与VHDL混用详解1.概述由于在FPGA开发过程中,多人合作时可能遇到有人使用veriloghdl,有人遇到VHDL的情况,这就涉及到了veriloghdl与VHDL的相…

    2022年9月21日
    1
  • RBAC权限管理

    RBAC权限管理

    2021年11月29日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号