当前位置: 首页 > 面试题库 >

将列表传递给值函数

柴彬
2023-03-14
问题内容

我想按值将列表传递给函数。默认情况下,列表和其他复杂对象通过引用传递给函数。这是一些目标:

def add_at_rank(ad, rank):
    result_ = copy.copy(ad)
    .. do something with result_
    return result_

可以写得短些吗?换句话说,我不想更改 ad


问题答案:

您可以使用[:],但是对于包含列表(或其他可变对象)的列表,您应该使用copy.deepcopy()

lis[:]等价于list(lis)copy.copy(lis),并返回列表的浅表副本。

In [33]: def func(lis):
    print id(lis)
   ....:

In [34]: lis = [1,2,3]

In [35]: id(lis)
Out[35]: 158354604

In [36]: func(lis[:])
158065836

何时使用deepcopy()

In [41]: lis = [range(3), list('abc')]

In [42]: id(lis)
Out[42]: 158066124

In [44]: lis1=lis[:]

In [45]: id(lis1)
Out[45]: 158499244  # different than lis, but the inner lists are still same

In [46]: [id(x) for x in lis1] = =[id(y) for y in lis]
Out[46]: True

In [47]: lis2 = copy.deepcopy(lis)

In [48]: [id(x) for x in lis2] == [id(y) for y in lis]  
Out[48]: False


 类似资料:
  • 问题内容: 我正在学习如何在Python中嵌入Rust函数,并且如果我的输入是s而不是list ,一切都可以正常工作。 如果我的文件是: 我可以这样使用: 但是,如果我更改为: 我不能再在Python中使用它(此编译良好): 原因,尽管我可以这样做是因为Python和Rust都是 动态数组 ,但显然我在这里缺少了一些东西。 为什么我的尝试不起作用?我该怎么做才能解决? 问题答案: 不要这样做: 基

  • 我正试图添加一个新列到spark dataframe中,如下所示: 我试图将上面的列值列表作为新列传递给dataframe,并尝试对该新列执行sha2,并尝试执行varchar(64)。

  • 问题内容: 此代码无法正常工作。我想要的只是将变量发送到 正确的方法是什么?: 脚本 问题答案: myFile.php:

  • 问题内容: 我正在尝试从SQL导出到.csv,如果我对其进行硬编码以接受一定数量的参数,则它可以正常工作。问题是,我想允许用户请求任意数量的参数,并将它们传递给where子句。该代码应该使这一点更加清楚。 所以我想我要做的是将列表传递给where子句,而不是显式的:dates#变量。例如,一个人可以使用参数“ 2012-01-0412:00、2012-02-04 12:00、2012-03-04

  • 有没有比传递分隔字符串并稍后解析它更优雅的方法来传递可选的整数列表到?我也有一个位置论点。 不工作,因为试图获取并抱怨它不是整数。 理想情况下,我想与其中一个执行 或者类似的东西,但也能

  • 我有一个输入,当按“回车键”调用一个函数来重新加载列出的项目时,我需要。为此,我正在使用 当在loadItems调用中使用常量值时,这种方法效果很好,但只要我想传递输入值,就会出现一个错误: 这就是我得到的