我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.
如何正确克隆JavaScript对象?
我想做的事情如下:
MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)
然后更改未在原始对象中反映的新对象.
我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.
如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?
在阅读文档时dict.copy(),它说它是字典的浅层副本.我所遵循的书(Beazley的Python参考书)也是如此,它说:
m.copy()方法生成映射对象中包含的项的浅表副本,并将它们放在新的映射对象中.
考虑一下:
>>> original = dict(a=1, b=2)
>>> new = original.copy()
>>> new.update({'c': 3})
>>> original
{'a': 1, 'b': 2}
>>> new
{'a': 1, 'c': 3, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
所以我假设这会更新original(并添加'c':3)的值,因为我正在做一个浅拷贝.就像你为列表做的那样:
>>> original = [1, 2, 3]
>>> new = original
>>> new.append(4)
>>> new, original
([1, 2, 3, 4], [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
这按预期工作.
由于两者都是浅拷贝,为什么dict.copy()它不能像我期望的那样工作?或者我对浅层和深层复制的理解是有缺陷的?
import copy
a = "deepak"
b = 1, 2, 3, 4
c = [1, 2, 3, 4]
d = {1: 10, 2: 20, 3: 30}
a1 = copy.copy(a)
b1 = copy.copy(b)
c1 = copy.copy(c)
d1 = copy.copy(d)
print("immutable - id(a)==id(a1)", id(a) == id(a1))
print("immutable - id(b)==id(b1)", id(b) == id(b1))
print("mutable - id(c)==id(c1)", id(c) == id(c1))
print("mutable - id(d)==id(d1)", id(d) == id(d1))
Run Code Online (Sandbox Code Playgroud)
我得到以下结果 -
immutable - id(a)==id(a1) True
immutable - id(b)==id(b1) True
mutable - id(c)==id(c1) False
mutable - id(d)==id(d1) False
Run Code Online (Sandbox Code Playgroud)
如果我进行深度扫描 …
System.Array.CopyTo()和之间有什么区别System.Array.Clone()?
如何在Kotlin中复制列表?
我正在使用
val selectedSeries = mutableListOf<String>()
selectedSeries.addAll(series)
Run Code Online (Sandbox Code Playgroud)
有更简单的方法吗?
我是否应该Record用于在控制器和服务层之间移动数据的所有 DTO 类?
我是否应该Record用于所有请求绑定,因为理想情况下我希望发送到控制器的请求对于我的 asp.net api 是不可变的
什么是记录?https://anthonygiretti.com/2020/06/17/introducing-c-9-records/
public class HomeController
{
public IHttpAction Search([FromBody] SearchParameters searchParams)
{
_service.Search(searchParams);
}
}
Run Code Online (Sandbox Code Playgroud)
应该发SearchParameters一个Record?
复制列表的最佳方法是什么?我知道以下方法,哪一个更好?或者还有另一种方式吗?
lst = ['one', 2, 3]
lst1 = list(lst)
lst2 = lst[:]
import copy
lst3 = copy.copy(lst)
Run Code Online (Sandbox Code Playgroud)