python直接赋值、浅拷贝和深拷贝
import copy names = ['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]] # 直接赋值,指向同一个内存地址
names1 = names # 浅拷贝:重新分配一块内存,创建一个新的对象,里面的元素是指原对象中子对象的引用
names2 = list(names)# 数据类型本身的构造器
names3 = names1[:] # 切片
names4 = copy.copy(names) # 深拷贝:递归地拷贝原对象中的每一个子对象
names5 = copy.deepcopy(names)
names1[0] = 'haha'
names1[-1][0] = 44 print(names1)
print(names2)
print(names3)
print(names4)
print(names5) # 输出
"""
['haha', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象和子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [44, 22, 33]]#父对象独立,子对象都指向同一个内存地址
['Amir', 'Barry', 'Cgakes', 'Dao', [11, 22, 33]]#父对象和子对象都是独立的
"""
总结:
赋值就是系统先给一个对象分配了内存地址,然后再将内存地址指向另一个对象,如a=b
浅拷贝是父对象独立,但是子对象指向同一个内存地址
通常用数据类型本身的构造器如list(),set()
python提供的函数copy.copy()可以适用于任何数据类型
对于可变序列,可以通过切片操作符':'来完成浅拷贝
深拷贝是和原来的父子对象完全独立,父对象和子对象都指向完全不同的内存地址,copy.deepcopy()
相同值的可变类型的内存地址是不一样的,但是修改时不需要开辟一块新的空间,只需修改原内存地址就行了
相同值的不可变类型的内存地址是一样的
python直接赋值、浅拷贝和深拷贝的更多相关文章
- 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
引用:https://www.jb51.net/article/142775.htm 列表赋值: 1 2 3 4 5 6 7 >>> a = [1, 2, 3] >>&g ...
- 16.python中的浅拷贝和深拷贝
在讲什么是深浅拷贝之前,我们先来看这样一个现象: a = ['scolia', 123, [], ] b = a[:] b[2].append(666) print a print b
- Python 引用、浅拷贝、深拷贝解析
引用 Python是动态数据类型的语言,故在对变量进行赋值时是不用制定变量类型的. 或者说,你可以把变量赋值的过程,当作是贴一个标签,去引用该数据. 看下面的例子: In [54]: a=4 In [ ...
- python 基础之浅拷贝与深拷贝
浅拷贝与深拷贝 1.普通赋值 例1: a = 15b = aa = 16print(b)#例2:lst1 = [1,2,3]lst2 = lst1lst1.append(4)print(lst2)#这 ...
- python 进阶篇 浅拷贝与深拷贝
阐述引用.浅拷贝和深拷贝前,首先需要要了解 Python 的世界里,一切皆对象,每个对象各包含一个 idendity.type 和 value. 引用(Reference) >>> ...
- python中的浅拷贝,深拷贝
直接引用,间接引用 # 1.列表存储的是索引对应值的内存地址,值会单独的开辟一个内存空间 list = ["a","b"] 内存里面存储的就是list[0],l ...
- python中赋值-浅拷贝-深拷贝之间的关系
赋值: 变量的引用,没有拷贝空间 对象之间赋值本质上 是对象之间的引用传递而已.也就是多个对象指向同一个数据空间. 拷贝的对象分两种类型: . 拷贝可变类型 浅拷贝: 只拷贝第一层数据,不关心里面的第 ...
- python中的浅拷贝和深拷贝
1.赋值语句 a = 'abc' b = a print id(a) print id(b) # id(a):29283464 # id(b):29283464 通过简单的复制,我们可以看到,a b其 ...
- Python核心编程--浅拷贝与深拷贝
一.问题引出浅拷贝 首先看下面代码的执行情况: a = [1, 2, 3] print('a = %s' % a) # a = [1, 2, 3] b = a print('b = %s' % b) ...
- Python中的浅拷贝与深拷贝
编者注:本文主要参考了<Python核心编程(第二版)> 以下都是参考资料后,我自己的理解,如有错误希望大家不吝赐教. 大家有没有遇到这样一种情况,对象赋值后,对其中一个变量进行修改,另外 ...
随机推荐
- 使用MSBUILD 构建时出错 error MSB3086: 任务未能使用 SdkToolsPath“”或注册表项“XXX”找到“LC.exe”,请确保已设置 SdkToolsPath。
如果项目有添加有WB引用,比如引用其它网站的WEB服务等,那么VS在编译时会自动生成个 [项目名称].Serializers.dll的文件,就是把引用服务中的相关对象信息生成硬编码的程序集,以提高效率 ...
- 利用按钮打开tabBar页面
场景:当tabBar上有个人中心的时候,这里假设需要登陆才可以看到个人中心A页面,在A页面onload中先判断是否登陆,如果没有登陆就跳转到登陆页面B,待输入用户名和密码,点击登陆按钮后再跳转到A页面 ...
- [Offer收割]编程练习赛13 B.最大子矩阵[枚举]
#1502 : 最大子矩阵 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxM的矩阵A和一个整数K,小Hi希望你能求出其中最大(元素数目最多)的子矩阵,并且该 ...
- 计算机从加电到系统(Linux)启动完成
0x0 背景 在我参加的面试和我面试别人.或者参加别人对别人的面试的事后经常遇到的一个问题就是:请从计算机加电开始描述一下计算机启动到操作系统正式启动起来的全过程.这是一个考验对计算机体系结构和基本知 ...
- 为gitlab10.x增加使用remote_user HTTP头的方式登录
项目的结构是这样的: 客户端通过Apache来访问后端的gitlab(gitlab的版本是10.4,手动从源码安装的简体中文版) , Apache作为gitlab的反向代理服务器 Apache内置了C ...
- [Windows]Window 7 修改系统时区
注意:编码存储为ANSI tzutil /s "China Standard Time"pause
- Android 使用MediaPlayer 播放 视频
http://pan.baidu.com/s/1lgKLS package cn.bgxt.surfaceviewdemo; import java.io.File; import android.m ...
- Node学习HTTP模块(HTTP 服务器与客户端)
Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...
- java使用AES256解密
网上关于java用AES加密解密的文章有很多,我这里只用到解密(加密是服务器那边做^_^),所以更简洁一些: public class AES256Utils { private static fin ...
- numpy.argsort详解
numpy.argsort(a, axis=-1, kind='quicksort', order=None)[source] Returns the indices that would sort ...