Python中:赋值 vs. 浅拷贝
赋值:
在内存中,只有一个列表对象被创建,a和b这两个变量都存储了这个对象的内存地址(引用)。
浅拷贝:新对象本身在内存中有新的存储空间,但其中的可变元素(如果有)和原始对象中的可变元素共享内存地址。
这样的定义根本理解不了,请问是否有对应的内存图进行说明呢?
https://github.com/bterwijn/memory_graph#copying
根据这个你下载下来看看:
然后这个网站也有图文并茂的讲解,你可以看看理解一下,不过是英文的:
copy-python-deep-copy-shallow-copy
当然,下面是通过Markdown格式提供的内存图,用于说明Python中赋值和浅拷贝的区别。
内存布局:
+----------+
| List |
| [1, 2, 3]|
+----------+
^ ^
| |
a ---- b ----
- **解释**:在赋值操作中,`a` 和 `b` 都指向同一个列表对象。这意味着对 `a` 或 `b` 所做的任何修改都会影响到另一个变量,因为它们引用的是同一个内存地址。
### 浅拷贝
内存布局:
+----------+ +----------+
| List | | List |
| [1, 2, 3]| < | [1, 2, 3]| (元素引用相同)
+----------+ +----------+
^ ^
| |
a ---- b ----
a
和 b
分别指向两个不同的列表对象。然而,这两个列表对象中的元素(如果是可变类型,如列表、字典等)仍然共享相同的内存地址。这意味着如果你修改一个列表中的可变元素(比如 a[1] = 4
),这个修改不会影响到另一个列表对象的结构(因为列表对象本身是独立的),但是如果你修改了被共享的可变元素的内容(比如列表中的另一个列表),那么这个修改将会影响到所有引用这个可变元素的列表对象。希望这些内存图能帮助你更好地理解赋值和浅拷贝在Python中的区别。
浅复制 将对象的引用存储在新的内存位置。对新位置所做的更改也会反映在以前的位置上。它比深拷贝更快。 深度复制 将对象的值存储在新位置。对新位置所做的任何更改都不会反映在以前的位置上。id 用于查看对象的内存地址。当然,下面例子的地址在你的计算机上是不同的。 ## 浅拷贝 data = [1, 2, 3, 4, 5] updated_data = data updated_data.
本文向大家介绍Python直接赋值、浅拷贝与深度拷贝实例分析,包括了Python直接赋值、浅拷贝与深度拷贝实例分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python直接赋值、浅拷贝与深度拷贝。分享给大家供大家参考,具体如下: 直接赋值:其实就是对象的引用(别名)。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy): copy 模块的 dee
本文向大家介绍什么是浅拷贝?它与C#中的深拷贝有何不同?,包括了什么是浅拷贝?它与C#中的深拷贝有何不同?的使用技巧和注意事项,需要的朋友参考一下 浅拷贝- 对象的浅表副本将复制“主”对象,但不复制内部对象。 “内部对象”在原始对象及其副本之间共享。 浅表副本的问题在于两个对象不是独立的。如果修改一个对象,则更改将反映在另一个对象中。 深度复制- 深层副本是对象的完全独立的副本。如果我们复制对象,
主要内容:到底是浅拷贝还是深拷贝对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如: b 和 obj2 都是以拷贝的方式初始化的,具体来说,就是将 a 和 obj1 所在内存中的数据按照二进制位(Bit)复制到 b 和 obj2 所在的内存, 这种默认的拷贝行为就是 浅拷贝 ,这和调用 memcpy() 函数的效果非常类似。 对于简单的类,默认的拷贝构造函数一般就够用了,我们也没有必要再显式地定义一
浅拷贝 对于对象或数组类型,当我们将a赋值给b,然后更改b中的属性,a也会随着变化。 也就是说,a和b指向了同一块堆内存,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝。 深拷贝 那么相应的,如果给b放到新的内存中,将a的各个属性都复制到新内存里,就是深拷贝。 也就是说,当b中的属性有变化的时候,a内的属性不会发生变化。 参考链接: 深拷贝与浅拷贝的实现(一) javaScript中浅拷
本文向大家介绍深入理解python中的浅拷贝和深拷贝,包括了深入理解python中的浅拷贝和深拷贝的使用技巧和注意事项,需要的朋友参考一下 在讲什么是深浅拷贝之前,我们先来看这样一个现象: 为什么我只对b进行修改,却影响到了a呢?看过我在之前的文章中就说过:序列中保存的都是内存的引用。 所以,当我们通过b去修改里面的空列表的时候,其实就是修改内存中的同一个对象,所以会影响到a。 代码验证无误,所以
本文向大家介绍iOS 深拷贝 和浅拷贝的区别相关面试题,主要包含被问及iOS 深拷贝 和浅拷贝的区别时的应答技巧和注意事项,需要的朋友参考一下 深拷贝和浅拷贝的区别? 答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。 深层复制:复制引用对象本身。 意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,
一、引言 对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。Java中有三种类型的对象拷贝:浅拷贝(Shallow Copy)、深拷贝(Deep Copy)、延迟拷贝(Lazy Copy)。 二、浅拷贝 1、什么是浅拷贝 浅拷贝是按位拷贝对象,它会创建一个新对象,这个对象有着