问题标签 [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 投票
2 回答
4489 浏览

python - 应用于列表的乘法运算符(数据结构)

我正在阅读如何像计算机科学家一样思考,这是“Python 编程”的介绍性文本。

我想澄清乘法运算符 ( *) 应用于列表时的行为。

考虑函数make_matrix

实际输出为

make_matrix的正确版本 是:

make_matrix的第一个版本失败的原因(如书中 9.8 中所述)是

...每一行都是其他行的别名...

我想知道为什么

原因...每一行都是其他行的别名...

但不是

即为什么每一[0]行都不是其他行元素的别名。

0 投票
11 回答
103399 浏览

java - 在 Java 中,什么是浅拷贝?

java.util.Calendar.clone() 返回“...具有相同属性的新日历”并返回“此日历的浅表副本”。

正如在 SO 上回答那样,这似乎不是一个浅拷贝。该问题被标记为与语言无关, Java 似乎不遵循与语言无关的定义。当我单步执行代码时,我注意到结构和元素被复制到这个新对象中,而不仅仅是与语言无关的结构。

在 Java 中,什么是浅拷贝?

它与 Java 深拷贝(如果存在)有何不同?

0 投票
3 回答
18170 浏览

list - 如何在 Scala 中复制列表

我想在 Scala 中浅拷贝一个列表。

我想做一些类似的事情:

但是克隆方法是受保护的。

0 投票
1 回答
298 浏览

c++ - 浅拷贝是否共享指针?(C++)

我知道如果我这样做:

那么Obj1's 和Obj2'snine将指向同一个 s 8,但它们会共享同一个指针吗?IE:

将指向Obj2还是将 一直 指向?nineNecronine8

0 投票
4 回答
11040 浏览

c++ - std::map 的浅/深拷贝

我将如何最好地实施这些?我想到了这样的事情:

成员data定义如下:

不幸的是,这不起作用。这是编译器错误,我不太了解它们:

不知何故,这对我来说看起来不必要地复杂。这是真的吗?我可以让它变得更好吗?

顺便说一句,我从 shape 派生的类中有 clone() 方法。也许我可以将它们用于 clone_deep 方法?他们还好吗?它们看起来像这样:

0 投票
1 回答
9070 浏览

perl - 如何制作 Perl 哈希引用的浅拷贝?

我想推送对哈希的引用。我的意思是我想推送一个对新哈希的引用,它是我给定的哈希的浅拷贝。

如何创建浅拷贝?

0 投票
2 回答
5848 浏览

c++ - 对于具有 char[] 的结构,浅拷贝是否足够?

我有一个包含字符数组的结构,没有任何其他成员函数。我正在这些结构的两个实例之间进行赋值操作。如果我没记错的话,它是在做浅拷贝。在这种情况下,浅拷贝安全吗?

I've tried this in C++ and it worked but I would just like to confirm if this behavior is safe.

0 投票
3 回答
72560 浏览

java - Java中地图的浅拷贝

据我了解,有几种方法(也许还有其他方法)可以Map在 Java 中创建 a 的浅表副本:

一种方式优于另一种方式,如果是,为什么?

值得一提的是,第二种方式给出了“Unchecked Cast”警告。所以你必须添加@SuppressWarnings("unchecked")才能绕过它,这有点令人讨厌(见下文)。

0 投票
11 回答
30838 浏览

c++ - 我可以在 C++ 中使用 memcpy 来复制没有指针或虚函数的类吗

假设我有一堂课,如下所示;

如果我的类没有指针或虚方法,使用以下内容是否安全?

我问的原因是,我正在处理非常大的分页数据集合,如此所述,其中性能至关重要,而 memcpy 提供了比迭代分配显着的性能优势。我怀疑应该没问题,因为“this”指针是一个隐式参数,而不是任何存储的参数,但是我应该注意其他隐藏的问题吗?

编辑:

根据尖牙评论,数据不包括任何句柄或类似的参考信息。

根据 Paul R 的评论,我已经分析了代码,在这种情况下,避免复制构造函数的速度大约快 4.5 倍。这里的部分原因是我的模板化数组类比给定的简单示例要复杂一些,并且在为不允许浅复制的类型分配内存时调用放置“新”。这实际上意味着调用默认构造函数以及复制构造函数。

第二次编辑

或许值得指出的是,我完全接受以这种方式使用 memcpy 是不好的做法,在一般情况下应避免使用。使用它的具体情况是作为高性能模板化数组类的一部分,其中包括一个参数“AllowShallowCopying”,它将调用 memcpy 而不是复制构造函数。这对诸如删除数组开头附近的元素以及将数据分页进出辅助存储等操作具有很大的性能影响。更好的理论解决方案是将类转换为简单的结构,但考虑到这涉及对大型代码库的大量重构,避免它不是我热衷于做的事情。

0 投票
5 回答
612 浏览

c# - 在 C# 中将对象复制到“this”对象

我有一些类需要能够将所有公共属性从一个对象复制到另一个对象。
每个类都有一组可能与任何其他类不同的公共属性。

例子:

通过谷歌搜索,我已经阅读了这些方法:

  • 使用反射
  • 生成 IL 代码
  • 序列化

所有这些都非常复杂或非常缓慢,或者有时两者兼而有之。
我错过了什么吗?还有其他方法可以访问原始this指针吗?

编辑:
我会澄清。
T 是调用类的类型。例如,如果它被 D1 调用,则 T 将始终为 D1。
通用的原因是我真的不知道 T 是什么。
我错过了什么吗?
我应该只Base data用作参数吗?