问题标签 [shallow-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
14372 浏览

java - java中的clone()是浅拷贝吗?

clone()在java中是浅拷贝吗?

最终这会到达 Object(最上层类)的 clone() 方法,该方法创建一个与对象相同的类的新实例,并将所有字段复制到新实例(“浅拷贝”)。

我从维基百科读到这个。

我不明白为什么它是浅拷贝。clone()将创建一个包含所有字段的新实例。这只是一个深拷贝吗?使困惑。需要给我一些解释。

0 投票
4 回答
3329 浏览

c# - 不可变对象中的浅拷贝与深拷贝

早上好,下午或晚上,

当将给定的类实现为不可变的类时,没有任何方法或属性以任何方式公开私有/内部字段,浅拷贝是一种不好的做法,还是可以毫无问题地完成,因为它可能需要实例化的对象少得多?

非常感谢。

0 投票
2 回答
231 浏览

macos - 关于 iPhone 对象 C 数组以及深度和指针复制的基本问题

我是 iPhone / Mac 领域的新手,这可能是一个非常基本的问题,我进行了一些搜索,但没有找到直接答案。

我想知道 Arrays / Mutable Arrays 的 addObject 方法在添加时是浅的(仅指针)还是深的(复制对象)。

  1. 已分配的可变数组
  2. 一个 NSString 已经分配了某种 init
  3. 我们将字符串添加到可变数组中
  4. 然后我们释放 NSString

如果这是做事的正确方法,则假定 addObject 将对 NSString 进行深层复制。只需确认这是使用可变数组进行内存管理的正确方法......

0 投票
5 回答
33103 浏览

java - 浅平等和深平等有什么区别?这如何应用于缓存?

在我的笔记中找到以下内容,但我无法理解:

原始类型包装类为有限数量的值实现缓存。
这保证了有限数量的深度相等的包装对象也是浅相等的: If o1.equals( o2 )then o1 == o2
例如,new Integer( 0 ) == new Integer( 0 )
一般来说,这并不总是有效。
例如,new Integer(666) == new Integer(666)
可能不成立。
缓存的原因是它可以节省内存。
一般来说,缓存适用于“小”原始值。

我不明白这是什么意思,或者深(.equals())和浅(==)等于之间有什么区别。我知道在实践中, .equals 必须用于对象, == 用于 Integral 值,但对此的实际推理暗示了我。

我假设浅的名称可能只是检查两个值的类型和名称是否相同,而深层检查两个变量是否指向同一个对象?不过,我看不出缓存将如何在这里发挥作用,或者为什么它会有用。

0 投票
3 回答
1049 浏览

java - 克隆列表 - 它是如何完成的?

我想制作一个由方法调用返回的 List 的浅表副本(它是来自 Android 的公共 List getScanResults (),请参阅http://developer.android.com/reference/android/net/wifi/WifiManager.html# getScanResults%28%29 )。问题是,clone() 没有在 List 接口上定义,而只是在像 ArrayList 这样的具体类上定义 - 但是我不知道 getScanResults() 在内部使用什么,所以我不能简单地转换它或者我错了这个?然后我想到了类似的东西

anExistingList.add(getScanResults());

但是 getScanResults() 似乎返回 null 而不是一个空列表,如果没有什么可以返回,所以这也是没有选择的。当我会做类似的事情时

getScanResults() 的返回值可能会在第一行代码行和第二行代码行之间发生变化,因此它可以先通过“不等于空”条件,然后在第二行中为空,还是我错了?

那么,我将如何制作 getScanResults() 的返回值的浅表副本或只是制定我的目标:从 getScanResults() 获取值并确保它在我使用它时不会改变?

感谢您的任何提示:-)(我想我只是理解错了)

0 投票
1 回答
783 浏览

xml - XSLT 中文字结果元素的浅拷贝是什么?

关于:

文字结果元素充当在结果树中构造具有相同名称的元素节点的指令。XSLT 处理器有效地从样式表创建文字结果元素的浅表副本,并将其插入到结果树中当前正在构建的位置处的结果树中。

资料来源: http: //lenzconsulting.com/how-xslt-works/#literal_result_elements

我想知道他说的时候是什么意思The XSLT processor effectively creates a shallow copy of the literal result element

在这种情况下,浅拷贝是什么意思?

0 投票
2 回答
500 浏览

java - 如何在 Java 中的 ArrayList 和 TreeSet 之间共享元素?

我想同时修改 ArrayList 和 TreeSet 的元素。

前任。当我从 TreeSet 修改一个元素时,Arraylist 中的相应元素也会被修改。

0 投票
1 回答
7148 浏览

c++ - 是 vector::push_back() 制作浅拷贝以及如何解决这个问题

在我正在编写的程序中,我有一些类似于这里的代码:

正如你所看到的,我将一个 struct ( people youngling) 推回到一个向量 ( vector<people> master) 中。但是,这段代码给了我错误的结果,我认为这可能是由结构和浅拷贝问题引起的。这在一定程度上得到了证明,因为如果我使用完整的数组people来存储输入,那么答案是正确的。但我对此感到困惑:

  1. struct 只是指向编译器的指针,还是为什么存在这种浅拷贝问题?
  2. 我声明了people younglinginner loop,希望能解决这个问题,但是没用。有什么简单的方法可以更正上面的代码片段吗?
  3. 当我使用 GCC 4.4 对小案例进行测试时,答案似乎是正确的。但是,当我使用 gnu C++0X 测试它时,答案是错误的。这是编译器特定的问题吗?

注意:我无法提供错误的测试用例,因为我使用的是裁判系统在线测试它。

0 投票
1 回答
778 浏览

ruby - Ruby 对象克隆/复制

概述

我在我的 ruby​​ 脚本中从生成 XML 文件的数据库查询中创建对象。我已经做到了,因此一次只处理一个 XML 文件,并且所有标签都是通用的,因此可以轻松添加其他查询。

问题

我一次创建一个对象,然后将其添加到列表中,如下所示:

但是每次我处理一个 XML 文件时,我都想创建一个 BarChart,我正在重用bar_chart导致我的对象数据被覆盖的变量。我正在寻找解决此问题的方法。

我试过的

我试图将对象的副本传递到列表中,但这仍在覆盖数据。

任何帮助/想法都会很棒。谢谢。

编辑,更多信息 这是我进行 XML 处理的方法。

0 投票
3 回答
6383 浏览

vb.net - VB.NET,是从函数引用返回的对象

这应该是一个相当普遍的问题,但我在任何地方都没有找到直接的答案。

如果我在 VB.NET 的函数中实例化一个对象并返回它,它是通过引用还是按值返回它。IE - 如果我写这样的东西,我是否应该担心性能:

如果我从其他地方调用这个函数,它会在 ret_obj 中实例化对象,然后创建一个深层副本以将副本传回给调用者,还是只是传回一个引用?