Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—使用乘法运算符创建列表中对象的副本_Python_List - Fatal编程技术网

Python—使用乘法运算符创建列表中对象的副本

Python—使用乘法运算符创建列表中对象的副本,python,list,Python,List,在Python中,如果我将对象列表乘以一个整数,我将得到该对象的引用列表,例如: >>> a = [[]] * 3 >>> a [[], [], []] >>> a[0].append(1) >>> a [[1], [1], [1]] 如果我想要的行为是创建原始对象的副本列表(例如,通过“copy.copy()”方法或某种标准创建的副本,是否有一种优雅的方法使用相同的乘法运算符来实现这一点?或者我应该坚持列表理解或其他方法

在Python中,如果我将对象列表乘以一个整数,我将得到该对象的引用列表,例如:

>>> a = [[]] * 3
>>> a
[[], [], []]
>>> a[0].append(1)
>>> a
[[1], [1], [1]]
如果我想要的行为是创建原始对象的副本列表(例如,通过“copy.copy()”方法或某种标准创建的副本,是否有一种优雅的方法使用相同的乘法运算符来实现这一点?或者我应该坚持列表理解或其他方法吗?例如

[[] for x in range(0,3)]

任何版本的Python都可以。

这是列表理解的一个很好的用法,也是最可读的方法


因此,您建议的范围(0,3)内的x的乘法运算符不是乘法运算符,而是得到您想要的结果。

序列上的乘法运算符意味着重复项,而不是创建项的副本(浅副本或深副本)。没有什么能阻止您发疯,a la:

import copy

class Crazy(object):
  def __init__(self, body, weird=copy.copy):
    self.gomez = body
    self.cousinitt = weird
  def __mul__(self, n):
    return [self.cousinitt(x) for x in (self.gomez * n)]

a = Crazy([[]]) * 3

…除了你的理智和常识,如果有的话。检查这些,你的梦想操作符
*
是如何被理解成与它的本意完全不同的意思的,除了以奇怪的方式定义另一个类重载
\uuuuuMul\uuuuu
。?-)

列表理解是最好的方法。如果您定义了一个新类并重载了*运算符,那么下一个阅读代码的人就会感到非常困惑。

虽然我理解您强调这一点很奇怪,但是从
列表继承
类不是更容易(更普遍地有用),这样我们就可以完成所有的grunt列表处理工作了吗,只需重载
\uuuuu mul\uuuuuu
操作符即可进行复制?通过这个奇怪的示例,我无法理解您的观点。无需成为rudeBest duplicate target: