红宝石子阵列会增加哪些存储要求?

问题描述

我试图了解传递子数组的递归算法和将索引传递给同一数组的递归算法之间的内存使用差异,特别是参考Ruby对内存的处理。我一直在努力地寻找关于Ruby子数组如何工作的文档。

例如在二进制搜索中,您的递归函数可能如下所示:

def search(list,target,low,high)

其中highlow是索引,并且在方法主体中的一行如下所示:

if list[mid_index] < target
  return search(list,mid_index + 1,high)

在这里,我们总是在方法之间传递相同的列表。

或者,相同的代码可以写为:

def search(list,target)
...
if list[mid_index] < target
  return search(list[(mid_index + 1)..list.length - 1],target)

在第二种情况下,看起来好像我传递了一个数组的子集(只是对相同对象的引用?),但是我实际上是通过使用[]运算符来创建列表的副本,或将它们用作方法参数?

解决方法

我一直很难找到有关Ruby子数组如何工作的文档。

我认为documentation of Array#[]非常清楚(粗体强调):

df.groupby('Animal')['Max Speed'].mean() Animal Falcon 370.0 Parrot 25.0 Name: Max Speed,dtype: float64 print('0 ',df.groupby('Animal').groups,end='\n\n') print('1 ',df.groupby('Animal'),end='\n\n') print('2 ',df.groupby('Animal').get_group('Falcon'),end='\n\n') print('3 ',df.groupby('Animal').get_group('Falcon')['Max Speed'],end='\n\n') print('4 ',df.groupby('Animal').get_group('Falcon')['Max Speed'].mean(),end='\n\n') 0 {'Falcon': Int64Index([0,1],dtype='int64'),'Parrot': Int64Index([2,3],dtype='int64')} 1 <pandas.core.groupby.generic.DataFrameGroupBy object at 0x7fc5499a9a00> 2 Age Animal Max Speed Type 0 10 Falcon 390.0 Captive 1 11 Falcon 350.0 Wild 3 0 390.0 1 350.0 Name: Max Speed,dtype: float64 4 370.0 ary[start,length]

采用开始和结束索引的new_ary形式(以及采用Range的形式)返回 new数组,而不是某种 slice 或 view 数据类型。 (尽管请注意,当然,只要不改变程序的任何可观察属性,就可以允许在后台执行这种优化。)