Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.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/0/xml/14.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 - Fatal编程技术网

Python 在列表中添加后立即删除键

Python 在列表中添加后立即删除键,python,Python,我这里有一个示例代码,追加字典并在追加之后立即删除它的键 def test(): x = [] sample_dict = dict( x=2, b=1, ) x.append(sample_dict) del sample_dict['x'] print(x) test() # result [{'b': 1}] 唯一的问题是,即使我在删除字典的键之前追加字典,它仍然会删除键,即使我在追加字典之后立即

我这里有一个示例代码,追加字典并在追加之后立即删除它的键

def test():
    x = []

    sample_dict = dict(
        x=2,
        b=1,
    )

    x.append(sample_dict)

    del sample_dict['x']

    print(x)

test() 
# result [{'b': 1}]
唯一的问题是,即使我在删除字典的键之前追加字典,它仍然会删除键,即使我在追加字典之后立即将其删除


我想知道如何在删除字典的键之前先添加字典。提前感谢

据我所知,将
x.append(sample\u dict)
替换为
x.append(sample\u dict.copy())
应该可以解决您的问题。

这是处理Python对象时面临的一个基本问题。当复制引用而不是值时,相等或附加Python对象将链接它们

因此,您的代码
x.append(sample_dict)
实际上是直接引用
sample_dict
,而不是复制它的数据。因此,对
sample_dict
的任何更改也将反映在列表中,因为列表只是保存对同一dict的引用

要解决这个问题,只需像这样立即复制
示例

x.append(dict(sample_dict))
现在,在运行修改后的代码时:

>>> def test():
    x = []

    sample_dict = dict(
        x=2,
        b=1,
    )
    x.append(dict(sample_dict))
    del sample_dict['x']

    print(x)

>>> test()
[{'x': 2, 'b': 1}]

你到底想干什么?这对我来说毫无意义。如果从dict中删除一个键,则也会从引用该dict的列表中删除该键。如果希望包含dict的列表不受
del
操作的影响,您需要先制作一份dict的副本。@YeongJongLim我试图在字典中附加属性,但我想要的是在将属性x附加到列表后立即删除它。您期望的输出是什么?@初学者此解决方案对您有效吗?这不是我想要的结果。它应该可以正常工作。问题在于,列表内外的dict实际上是相同的,但如果创建副本,情况会发生变化。