我试着创建一个包含一套字典的字典。为此,我写了下面。 但由于python中的一切都是对象,即使我已将新学员分配给dictionary student, 当我打印数据时,我只能看到123个数据。需要详细了解此行为以及如何克服此问题
students = {}
student = {}
student['id'] = 123
student['first_name'] = 'Raj'
student['last_name'] = 'Nath'
students[123] = student
student['id'] = 124
student['first_name'] = 'Naveen'
student_1['last_name'] = 'Jain'
students[124] = student
print(students)
在
students[123] = student
中,学生词典存储在123
键下。但它不是复制的。仍然在student
变量下,存在您正在访问的同一目录:因为它仍然是同一个字典,所以您将用新值覆盖旧值
如果要复制字典,请使用:
但更准确的方法是在分配以下内容后创建新的空字典:
Python几乎总是通过引用传递,以减少内存上的操作数。你可以阅读更多关于它的内容
您的方法多次将相同的
student
字典存储到students
字典中。所有不同的实例students[0], ..., students[n]
实际上都指向同一个对象,该对象包含上次提交的更新中指定的值为了使事情顺利进行,您必须在每次为新学生输入数据时实例化一个新词典,我发现使用类构造函数代替通常的文本尤其方便,但可能只是我
此外,遵循最少重复的原则,可以
ps1:当然,最大复制也是一个相互竞争的原则,你应该选择你喜欢的;-)
ps2:
id
是一个Python内置函数,您可以为id
分配一个整数,Python是自由的,但是您的程序的其他部分现在有被神秘破坏的危险…这里的问题是您没有创建新词典。运行行
students[123] = student
时,传递了存储在变量student
中的字典。之后,您继续修改同一本词典。我建议创建字典(students[123] = student.copy()
)的副本并将其存储在students
中,或者为每个学生创建一个新字典使用副本:
使用新词典:
相关问题 更多 >
编程相关推荐