首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python列表按值赋值

Python列表按值赋值
EN

Stack Overflow用户
提问于 2016-11-22 00:49:57
回答 1查看 56关注 0票数 1

我有一个列表撤消和另一个ap,我想保存每次我修改ap列表时撤消的副本,但当我保存时,例如在Undo2上我对ap所做的事情,Undo1与Undo2相同,看起来它分配的是列表ap而不是ap的值。我发现了一个类似的问题,并试图分配ap,这样它就会复制一份,但它没有。

代码语言:javascript
运行
复制
from Functionalitati import *
from Ui import *
from GlobalVr import *
Active = True
NumarApartamente = int(input("Numarul apartamentelor:"))
cntA = 0
while cntA < NumarApartamente:
    ap.append({"gaz":{}, "apa":{}, "electricitate":{}, "canalizare":{}, "altele":{}})
    cntA = cntA + 1
Undo = Undo + ap[ : ]
while Active:
    while True:
        op1 = Umenu()
        if op1 > 6 and op1 < 0:
            print(x,'Nu este o comanda valida')
        else:
            break
    if op1 == 0:
        break
    op2 = Submenu(op1)

    if op1 == 6 and UndoCont > 0:
        UndoCont = UndoCont - 1
        Undo.pop()
        ap = Undo[UndoCont]
        print (Undo)

    elif op1 == 1 and op2 == 1 :
        ap = AddCheltuiala(ap)
        Undo = Undo + ap[ : ]
        UndoCont = UndoCont + 1

    elif op1 == 1 and op2 == 2 :
        ap = ModCheltuiala(ap)
        Undo.append(ap[0:NumarApartamente - 1])
        UndoCont = UndoCont + 1

    elif op1 == 2 and op2 == 1 :
        ap = DelCheltuiala(ap)
        Undo.append(ap[0:NumarApartamente - 1])
        UndoCont = UndoCont + 1

    elif op1 == 2 and op2 == 2 :    
        ap = DelCCheltuiala(ap)
        Undo.append(ap[0:NumarApartamente - 1])
        UndoCont = UndoCont + 1

    elif op1 == 2 and op2 == 3 :
        ap = DelTip(ap,NumarApartamente)
        Undo.append(ap[0:NumarApartamente - 1])
        UndoCont = UndoCont + 1

我还尝试了append和Undo = Undo + ap,如您所见。如果代码有点乱,很抱歉。编辑:我删除了最后一次编辑,我想让它更清楚,所以我做了另一段代码来继续我想说的话

代码语言:javascript
运行
复制
from Functionalitati import *
from Ui import *
import datetime
ap = [] #lista principala

UndoCont = 0
nrAp = int(input("Da-ti numarul apartamentelor:"))
Undo = [None] * nrAp
contor = 0
while contor < nrAp:
    ap.append({"gaz":{}, "apa":{}, "electricitate":{}, "canalizare":{}, "altele":{}})
    contor = contor + 1

Undo[0] = ap[:]
print(Undo)
print("space" * 4)
ap[1]["gaz"]["date"] = 100
Undo[1] = ap[:]
print (Undo)

输出:

代码语言:javascript
运行
复制
Da-ti numarul apartamentelor:2
[[{'gaz': {}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}, {'gaz': {}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}], None]
spacespacespacespace
[[{'gaz': {}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}, {'gaz': {'date': 100}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}], [{'gaz': {}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}, {'gaz': {'date': 100}, 'canalizare': {}, 'electricitate': {}, 'altele': {}, 'apa': {}}]]

为什么撤消修改为Undo1?我尝试了Undo.append(列表( ap ))和Undo =撤消+列表(Ap)和相同的ap,现在我尝试初始化Undo之前和相同的结果。

EN

回答 1

Stack Overflow用户

发布于 2016-11-22 01:49:19

解决了。我真的不知道它是如何工作的,但我使用copy.deepcopy() (copy.copy()不工作)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40725295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档