相关疑难解决方法(0)

如何克隆或复制列表?

在Python中克隆或复制列表有哪些选项?

在使用时new_list = my_list,每次都会对new_list更改进行任何修改my_list.为什么是这样?

python clone copy list

2289
推荐指数
16
解决办法
149万
查看次数

Python:追加原始对象与追加对象的副本

首先,对不起,如果这个问题非常基本,我只是从 Python 开始。

我在理解 Python 3.6 如何创建对象并将其附加到列表时遇到问题。请参阅以下代码:

a_dict=dict()
a_list=list()

for i in range(100):
  a_dict['original'] = i
  a_dict['multi'] = i*2
  a_list.append(a_dict)
Run Code Online (Sandbox Code Playgroud)

列表的打印如下

print(a_list)
>>[{'original': 99, 'multi': 198}{'original': 99, 'multi': 198}...{'original': 99, 'multi': 198}]
Run Code Online (Sandbox Code Playgroud)

按照我原来的想法,i=0 -> original=0, multi=0; i=1 -> 原始=1,多=2;等等...

但是,根据这里的这个问题,Python 的 append() 附加了一个指向对象的指针,而不是实际值。因此,我将原始代码上的 append(original) 更改为 append(copy):

a_dict=dict()
a_list=list()

for i in range(100):
  a_dict['original'] = i
  a_dict['multi'] = i*2
  a_list.append(a_dict.copy()) ##change here
Run Code Online (Sandbox Code Playgroud)

现在,我得到了想要的结果:

print(a_list)
[{'original': 0, 'multi': 0}, {'original': 1, 'multi': 2}, {'original': 2, 'multi': 4},...]    
Run Code Online (Sandbox Code Playgroud)

现在,这是我的问题:

append() 如何真正起作用?是否总是列表包含指向其原始对象的类似指针的对象?其他类型呢?如果我的意图不是直接弄乱原始值或我正在使用的列表/容器,我应该总是使用 …

python pointers copy list append

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

在python中进行列表扩充赋值(+ =)的动机是什么?

>>> list1 = []
>>> list2 = list1
>>> list2 += [1]
>>> print list1
[1]
Run Code Online (Sandbox Code Playgroud)

比较这个

>>> list1 = []
>>> list2 = list1
>>> list2 = list2 + [1]
>>> print list1
[]
Run Code Online (Sandbox Code Playgroud)

有没有理由为什么'+ =' - 操作会修改原始列表?

编辑:只是为了让我的问题更清楚一点

在我所知道的大多数语言中,'+ =' - 运算符不能以这种方式工作,我想知道它为什么在python中以这种方式设计.

一些例子:

红宝石

irb(main):001:0> l = []
irb(main):002:0> a = l
irb(main):003:0> a += [2]
irb(main):004:0> l
=> []
Run Code Online (Sandbox Code Playgroud)

斯卡拉等..

python

5
推荐指数
3
解决办法
1789
查看次数

标签 统计

python ×3

copy ×2

list ×2

append ×1

clone ×1

pointers ×1