标签: deep-copy

deepcopy()非常慢

我在Python中有一个游戏状态,有大约1000个对象(行星系统+星星+行星),我需要复制它并在请求时应用一堆变换.但是,在大约1个请求/秒时,这占我运行时的24.63%.我怎样才能让它变得快速?请注意,复制较少不是一个选项,因为变换几乎触及所有内容.

编辑:通过明智的实施来降低到8%__deepcopy__.不过,还不够好.(足够好是1%或更少,我计划在此投掷更多的东西.)timeit说每个41.8ms deepcopy().

python optimization deep-copy

26
推荐指数
3
解决办法
1万
查看次数

在Perl中深度复制哈希散列的最佳方法是什么?

可能重复:
在Perl中制作数据结构的深层副本的最佳方法是什么?

在我开始自己编写代码并重新发明轮子之前,如何在不复制hashref的情况下复制散列哈希?

我正在通过Config :: General读取散列哈希值.即,数据结构是:

my %config = ( group => { item1 => { foo => 'value',
                                     bar => 'value',
                                   },
                          item2 => { foo => 'value',
                                     bar => 'value',
                                   },
                          item3 => { foo => 'value',
                                     bar => 'value',
                                   },
                        },
             );
Run Code Online (Sandbox Code Playgroud)

然后我通过解除引用来从配置中取出我的组,并在重写配置文件之前在运行时更改内容:

my %group = %{$config{'group'}};
Run Code Online (Sandbox Code Playgroud)

问题是我需要检查是否进行了更改并对系统的文件结构进行了相关更改.我不能通过检查来做到这一点:

if ($group{'item1'}{'foo'} ne $config{'group'}{'item1'}{'foo'}) {
    ### Stuff!
}
Run Code Online (Sandbox Code Playgroud)

as $group{'item1'}$config{'group'}{'item1'}都是完全相同的hashref.

现在虽然简单地重新解析配置文件并在保存到磁盘之前将磁盘中已解析的副本与编辑后的版本进行比较应该是微不足道的,但我确信有一种方法可以对复杂数据结构进行嵌套解引用,复制哈希引用的内容,而不是简单地复制引用本身.对CPAN的粗略检查并没有改变任何事情.我错过了什么?

基准

得到了我的答案:

#!/usr/bin/perl

use Benchmark qw(:all) ;
use Storable qw(dclone);
use Clone qw(clone); …
Run Code Online (Sandbox Code Playgroud)

perl deep-copy

24
推荐指数
3
解决办法
4万
查看次数

深层复制Java的ByteBuffer复制()

java.nio.ByteBuffer#duplicate()返回一个新的字节缓冲区,它共享旧缓冲区的内容.旧缓冲区内容的更改将在新缓冲区中可见,反之亦然.如果我想要字节缓冲区的深层副本怎么办?

java nio bytebuffer deep-copy

23
推荐指数
3
解决办法
3万
查看次数

Groovy中的深拷贝映射

如何在Groovy中深层复制地图地图?字符键是字符串或Ints.值以字符串,原始对象或其他映射,以递归方式.

groovy deep-copy

23
推荐指数
5
解决办法
2万
查看次数

python Pandas DataFrame copy(deep = False)vs copy(deep = True)vs'='

有人可以向我解释一下之间的区别

df2 = df1

df2 = df1.copy()

df3 = df1.copy(deep=False)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有选项,并按如下方式执行:

df1 = pd.DataFrame([1,2,3,4,5])
df2 = df1
df3 = df1.copy()
df4 = df1.copy(deep=False)
df1 = pd.DataFrame([9,9,9])
Run Code Online (Sandbox Code Playgroud)

并返回如下:

df1: [9,9,9]
df2: [1,2,3,4,5]
df3: [1,2,3,4,5]
df4: [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

所以,我发现.copy()和之间的输出没有区别.copy(deep=False).为什么?

我希望返回一个选项'=',copy(),copy(deep = False) [9,9,9]

我错过了什么?

python deep-copy dataframe pandas

23
推荐指数
3
解决办法
1万
查看次数

如何在Objective-C中制作深层副本?

我现在正在学习ios的开发,我对深层复制感到困惑.例如,我下面有三节课.现在我想深入复制ClassA,有人可以教我完成复制方法吗?

A:

@interface ClassA : NSObject <NSCopying>

@property (nonatomic, assign) int aInt;
@property (nonatomic, retain) ClassB *bClass;

@end
Run Code Online (Sandbox Code Playgroud)

B:

@interface ClassB : NSObject <NSCopying>

@property (nonatomic, assign) int bInt;
@property (nonatomic, retain) ClassC *cClass;

@end
Run Code Online (Sandbox Code Playgroud)

C:

@interface ClassC : NSObject <NSCopying>

@property (nonatomic, assign) int cInt;
@property (nonatomic, copy) NSString *str;

@end
Run Code Online (Sandbox Code Playgroud)

objective-c deep-copy

22
推荐指数
3
解决办法
3万
查看次数

使用JSON的javascript深拷贝

我有javascript对象(数组)深拷贝的问题.我读了许多处理它的好方法.我也知道jQuery有这个问题的$ .extend API.但我的问题是:我可以只使用JSON stringify和parse方法来解决这个问题吗?

这是我的代码:

function deepCopy(oldValue) { 
  var newValue
  strValue = JSON.stringify(oldValue)
  return newValue = JSON.parse(strValue)
}

var a = {
  b: 'b',
  c: [1,2,4],
  d: null
}

copy = deepCopy(a)

console.log(a === copy) // false
console.log(a.c === copy.c) // false
Run Code Online (Sandbox Code Playgroud)

PS:我知道如果没有所有对象都是可序列化的,但我知道的唯一情况是当对象包含一个属性是函数时.还有其他情况吗?

javascript json deep-copy

22
推荐指数
1
解决办法
3万
查看次数

C++:深度复制Base类指针

我四处搜索,似乎为了执行此操作,我需要更改我的Base类,并想知道这是否是最好的方法.例如,我有一个Base类:

class Base {}
Run Code Online (Sandbox Code Playgroud)

然后是一长串派生类:

class Derived_1:: public Base {}
class Derived_2:: public Derived_1{}
...
...
class Derived_n:: public Derived_M{}
Run Code Online (Sandbox Code Playgroud)

然后我又上了一堂课:

class DeepCopy 
{ 
  Base * basePtr;

  public:
   DeepCopy(DeepCopy & dc) {}
}
Run Code Online (Sandbox Code Playgroud)

假设Base类和Derived_x类复制构造函数已正确编码,那么为DeepCopy编写复制构造函数的最佳方法是什么.我们如何知道我们要复制的对象的basePtr中的类?

我能想到的唯一方法就是使用RTTI,但是使用一长串的dynamic_cast似乎不对.此外,它需要DeepCopy来了解Base类的继承层次结构.

我看到的另一种方法是在这里.但它需要Base和Derived类实现克隆方法.

那么有一个更简单,标准的方法吗?

c++ inheritance deep-copy copy-constructor

21
推荐指数
2
解决办法
1万
查看次数

泡菜和深层镜之间的关系

究竟是什么关系picklecopy.deepcopy?他们分享了哪些机制,以及如何?

很明显这两个是密切相关的操作,并分享了一些机制/协议,但我不能围绕细节.

我发现的一些(令人困惑的)事情:

  1. 如果一个类定义__[gs]etstate__,则会调用它们deepcopy的实例.这让我感到惊讶,因为我认为它们是特定的pickle,但后来我发现Classes可以使用相同的接口来控制用于控制酸洗的复制.但是,没有关于 __[gs]etstate__深度复制时如何使用的文档(如何使用返回的值__getstate__,传递给__setstate__什么?)
  2. 一个天真的替代实现deepcopy将是pickle.loads(pickle.dumps(obj)).但是,这不可能等同于deepcopy',因为如果一个类定义了一个__deepcopy__操作,那么使用这个基于pickle的deepcopy实现就不会调用它.(我还偶然发现了一个声明,即深度复制比pickle更普遍,并且有许多类型是深度可复制的,但不是pickleable.)

(1)表示共性,而(2)表示pickle和之间的差异deepcopy.

最重要的是,我发现了这两个相互矛盾的陈述:

copy_reg:pickle,cPickle和copy模块在pickle /复制这些对象时使用这些函数

复制模块不使用copy_reg注册模块

对此,一方面,是之间的关系/共性的另一个指示pickledeepcopy,而在另一方面,有助于我的困惑......

[我的经验是使用python2.7,但我也很感激有关python2和python3之间的pickle/deepcopy差异的任何指示]

python pickle deep-copy python-2.x

21
推荐指数
2
解决办法
3718
查看次数

如何使用嵌套数组/字典为NSArray和NSDictionary做真正的深度复制?

问题:有没有办法使用现有的objective-c方法来完成NSDictionary或NSArray的完整深层副本,它们本身有嵌套的词典或数组?

那是我已经读过的问题可能是当它遇到嵌套的字典或数组时它只复制指向嵌套项的指针,而不是真正复制该项.

背景:作为一个例子,我正在尝试使用NSUserDefaults加载/保存以下配置,并且当加载需要将不可变副本转换为NSUserDefault之前进行更改之前的可变副本.

  • 物品(NSDictionary)
    • 项目(NSDictionary)
      • aString:NSString
      • aString2:NSString
      • 日期:NSDate
      • aDate2:NSDate
      • aBool:BOOL
      • aTI1:NSTimeInterval
      • aTI2:NSTimeInterval
      • 关键词(NSArray)
        • keyword:NSString
        • keyword:NSString

iphone nsdictionary deep-copy nsmutabledictionary

20
推荐指数
3
解决办法
2万
查看次数