如果您想了解dict.clear的相关知识,那么本文是一篇不可错过的文章,我们将对与在Python中分配{}之间的区别进行全面详尽的解释,并且为您提供关于dict和set之间的区别(python)、P
如果您想了解dict.clear的相关知识,那么本文是一篇不可错过的文章,我们将对与在Python中分配{}之间的区别进行全面详尽的解释,并且为您提供关于dict和set之间的区别(python)、Python 中 dict.clear() 和分配 {} 的区别、python 遍历迭代器iter()与list的区别、python中dir和__dict__之间的最大区别是什么的有价值的信息。
本文目录一览:- dict.clear()与在Python中分配{}之间的区别(python dict clear)
- dict和set之间的区别(python)
- Python 中 dict.clear() 和分配 {} 的区别
- python 遍历迭代器iter()与list的区别
- python中dir和__dict__之间的最大区别是什么
dict.clear()与在Python中分配{}之间的区别(python dict clear)
在python中,调用clear()
和分配{}
给字典之间有区别吗?如果是,那是什么?例:
d = {"stuff":"things"}d.clear() #this wayd = {} #vs this way
答案1
小编典典如果您还有另一个变量也引用相同的字典,则有很大的不同:
>>> d = {"stuff": "things"}>>> d2 = d>>> d = {}>>> d2{''stuff'': ''things''}>>> d = {"stuff": "things"}>>> d2 = d>>> d.clear()>>> d2{}
这是因为分配d ={}
会创建一个新的空字典并将其分配给d
变量。这样就d2
指向旧字典,里面还有项目。但是,d.clear()
清除相同的字典,d
并且d2
两者都指向。
dict和set之间的区别(python)
所以,我知道
a = {} # dict
构造一个空字典。现在,我也意识到了这一点,
b = {1, 2, 3} # set
创建一个集合。这很容易验证,因为
>>>print(type(a))<class ''dict''>>>>print(type(b))<class ''set''>
虽然我了解它的作用,但看不到 为什么
我们对集合和字典使用相同的语法。我试图在手册的set
和dict
部分中找到有关此逻辑背后的更多信息,但可惜的是,我什么都没得到。
谁能向我解释为什么我们要这样做?是出于历史原因,还是我明显地遗漏了一些东西?
答案1
小编典典Python 2中没有 固定的文字 ,历史上花括号仅用于字典。集可以从列表(或任何可迭代对象)中产生:
set([1, 2, 3])set([i for i in range(1, 3)])
Python
3引入了集合文字和理解(请参阅PEP-3100),这使我们能够避免中间列表:
{1, 2, 3}{i for i in range(1, 3)}
但是,由于向后兼容,空集形式保留给字典使用。在P3K中来自[Python-3000]集合的引用?状态:
我确信我们可以解决问题—我同意,
如果不是为了向后兼容,那么{}
空集和{:}
空dict是理想的。当我第一次写PEP时,我喜欢“特殊的空对象”的想法(即,{}
可能变成集合或字典的东西),但是这里的一位指导者说服我,这只会导致新来者的困惑。思想(以及实施的痛苦)。
将以下信息更好地描述这些规则:
我认为Guido是最好的解决方案。使用
set()
空集时,用{}
空类型的字典,使用{genexp}
了一套推导/显示器,使用{1,2,3}
显式集文字,和使用{k1:v1, k2:v2}
的字典文字。如果需求超出需求,我们可以随时添加{
/}
。
Python 中 dict.clear() 和分配 {} 的区别
clear()
在python中,调用和分配{}
给字典有区别吗?如果是,那是什么?例子:
d = {"stuff":"things"}
d.clear() #this way
d = {} #vs this way
python 遍历迭代器iter()与list的区别
-
在遍历集合时,从逻辑上来说:
使用iteration与list并没有什么区别,但是当集合的数据量比较大的时候,两者还是有区别的。 -
从存储方式上说:
list是以数组的形式存储数据,需要在内存中分配一块连续的空间,所以当集合的数据量比较大的时候可能分配不了足够的连续内存,这个时候最好是使用迭代器iteration保存数据
python中dir和__dict__之间的最大区别是什么
class C(object): def f(self): print self.__dict__ print dir(self)c = C()c.f()
输出:
{}[''__class__'', ''__delattr__'',''f'',....]
为什么自我中不存在“ f”。dict
答案1
小编典典dir()
不仅仅是查找 __dict__
首先,dir()
是一种API方法,它知道如何使用属性__dict__
来查找对象的属性。
但是,并非所有对象都具有__dict__
属性。例如,如果要向自定义类添加__slots__
属性,则该类的实例将没有__dict__
属性,但dir()
仍可以列出这些实例上的可用属性:
>>> class Foo(object):... __slots__ = (''bar'',)... bar = ''spam''... >>> Foo().__dict__Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: ''Foo'' object has no attribute ''__dict__''>>> dir(Foo())[''__class__'', ''__delattr__'', ''__doc__'', ''__format__'', ''__getattribute__'', ''__hash__'', ''__init__'', ''__module__'', ''__new__'', ''__reduce__'', ''__reduce_ex__'', ''__repr__'', ''__setattr__'', ''__sizeof__'', ''__slots__'', ''__str__'', ''__subclasshook__'', ''bar'']
同样适用于许多内置类型。list
没有__dict__
属性,但是您仍然可以使用列出所有属性dir()
:
>>> [].__dict__Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: ''list'' object has no attribute ''__dict__''>>> dir([])[''__add__'', ''__class__'', ''__contains__'', ''__delattr__'', ''__delitem__'', ''__delslice__'', ''__doc__'', ''__eq__'', ''__format__'', ''__ge__'', ''__getattribute__'', ''__getitem__'', ''__getslice__'', ''__gt__'', ''__hash__'', ''__iadd__'', ''__imul__'', ''__init__'', ''__iter__'', ''__le__'', ''__len__'', ''__lt__'', ''__mul__'', ''__ne__'', ''__new__'', ''__reduce__'', ''__reduce_ex__'', ''__repr__'', ''__reversed__'', ''__rmul__'', ''__setattr__'', ''__setitem__'', ''__setslice__'', ''__sizeof__'', ''__str__'', ''__subclasshook__'', ''append'', ''count'', ''extend'', ''index'', ''insert'', ''pop'', ''remove'', ''reverse'', ''sort'']
dir()
实例有什么用
Python实例具有自己的__dict__
,但它们的类也有:
>>> class Foo(object):... bar = ''spam''... >>> Foo().__dict__{}>>> Foo.__dict__.items()[(''__dict__'', <attribute ''__dict__'' of ''Foo'' objects>), (''__weakref__'', <attribute ''__weakref__'' of ''Foo'' objects>), (''__module__'', ''__main__''), (''bar'', ''spam''), (''__doc__'', None)]
该dir()
方法使用 两种 这些__dict__
属性, 并且 一来就object
上创建实例,类可用属性的完整列表,并在类的所有祖先。
在类上设置属性时,实例也会看到以下内容:
>>> f = Foo()>>> f.hamTraceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: ''Foo'' object has no attribute ''ham''>>> Foo.ham = ''eggs''>>> f.ham''eggs''
因为该属性已添加到类中__dict__
:
>>> Foo.__dict__[''ham'']''eggs''>>> f.__dict__{}
注意实例如何__dict__
留空。在Python对象上进行属性查找遵循对象的层次结构,从实例到类型,再到父类,以搜索属性。
仅当直接在实例上设置属性时,您才可以在实例保持不变__dict__
的情况下看到反映在实例中的属性__dict__
:
>>> f.stack = ''overflow''>>> f.__dict__{''stack'': ''overflow''}>>> ''stack'' in Foo.__dict__False
TLDR;或摘要
dir()
不仅查找对象__dict__
(有时甚至不存在),它还将使用对象的遗产(其类或类型,以及该类或类型的任何超类或父级)为您提供完整的图像所有可用的属性。
实例__dict__
只是该实例上的“本地”属性集,并不包含该实例上可用的每个属性。相反,您还需要查看类和类的继承树。
今天关于dict.clear和与在Python中分配{}之间的区别的介绍到此结束,谢谢您的阅读,有关dict和set之间的区别(python)、Python 中 dict.clear() 和分配 {} 的区别、python 遍历迭代器iter()与list的区别、python中dir和__dict__之间的最大区别是什么等更多相关知识的信息可以在本站进行查询。
本文标签: