2024-09-30 06:20:03 发布
网友
L初始化为列表。然后将引用a L1添加到L。现在L1和L变量都应该指向同一个对象。那么为什么sys.getrefcount()仍然返回1呢?你知道吗
L
L1
sys.getrefcount()
>>> L = [1,2,3] >>> L1 = [1,2,3] >>> L==L1 True >>> L is L1 False >>> sys.getrefcount([1,2,3]) 1 >>> L1 = L >>> L1 is L True >>> sys.getrefcount([1,2,3]) 1
您正在创建新的列表。每个新列表只有一个引用,即参数对sys.getrefcount()函数的引用。你知道吗
如果要查看L和L1名称引用的列表对象的引用计数,则必须将这些名称传递到sys.getrefcount()函数中:
>>> import sys >>> L = [1,2,3] >>> sys.getrefcount(L) 2 >>> L1 = L >>> L1 is L True >>> sys.getrefcount(L) 3 >>> sys.getrefcount(L1) 3
L以两个引用开始:L名称本身和sys.getrefcount()的参数。当您同时将对象分配给L1时,现在又有一个对它的引用。你知道吗
不要混淆产生列表值的语法和存储在内存中的内容。如果你想象有两个相同的购物袋,你去商店把一包饼干放在一个袋子里,另一包同样类型的饼干放在另一个袋子里,这两个袋子是一样的吗?它们看起来是一样的,你可以吃那些饼干,它们的味道也一样,但是它们仍然是两个分开的袋子,里面装着饼干。如果有人偷了其中一个袋子,你还可以用另一个袋子来吃剩下的饼干。你知道吗
用Python编写[1, 2, 3]告诉Python制作一个新的购物袋(列表)并放入一些cookies(整数)。这个新包看起来与其他包(列表)相同,因此它们具有相同的值(==返回True),但它们不是相同的单个包(is不返回True)。你知道吗
[1, 2, 3]
==
True
is
现在,在那些袋子上贴上便条,写上袋子的名字。把L写在一张纸条上,贴在一个袋子上。把L1写在另一张纸条上,贴在另一个袋子上。它们的值仍然是相同的,但是当您询问Python如果L和L1是同一个包,那么您就知道它们不是,post-it注释被粘贴到两个不同的包中。但是如果你把那张L贴的便条从粘在上面的一个袋子里移到粘在上面的另一个袋子里呢?现在您在同一个包上有两个便笺,因此L is L1现在是真的。你知道吗
L is L1
sys.getrefcount()告诉你有多少便笺贴在袋子上。但是你需要告诉它关于便笺,而不是新的袋子。你知道吗
最后,你可以把这些袋子放在其他袋子里,或者把袋子放在labeled drawers in a filing system(或者dict对象)里,而getrefcount()也会把它们计算在内。因为便利贴不是追踪购物袋的唯一方法,对吧?你知道吗
dict
getrefcount()
您正在创建新的列表。每个新列表只有一个引用,即参数对
sys.getrefcount()
函数的引用。你知道吗如果要查看
L
和L1
名称引用的列表对象的引用计数,则必须将这些名称传递到sys.getrefcount()
函数中:L
以两个引用开始:L
名称本身和sys.getrefcount()
的参数。当您同时将对象分配给L1
时,现在又有一个对它的引用。你知道吗不要混淆产生列表值的语法和存储在内存中的内容。如果你想象有两个相同的购物袋,你去商店把一包饼干放在一个袋子里,另一包同样类型的饼干放在另一个袋子里,这两个袋子是一样的吗?它们看起来是一样的,你可以吃那些饼干,它们的味道也一样,但是它们仍然是两个分开的袋子,里面装着饼干。如果有人偷了其中一个袋子,你还可以用另一个袋子来吃剩下的饼干。你知道吗
用Python编写
[1, 2, 3]
告诉Python制作一个新的购物袋(列表)并放入一些cookies(整数)。这个新包看起来与其他包(列表)相同,因此它们具有相同的值(==
返回True
),但它们不是相同的单个包(is
不返回True
)。你知道吗现在,在那些袋子上贴上便条,写上袋子的名字。把
L
写在一张纸条上,贴在一个袋子上。把L1
写在另一张纸条上,贴在另一个袋子上。它们的值仍然是相同的,但是当您询问Python如果L
和L1
是同一个包,那么您就知道它们不是,post-it注释被粘贴到两个不同的包中。但是如果你把那张L
贴的便条从粘在上面的一个袋子里移到粘在上面的另一个袋子里呢?现在您在同一个包上有两个便笺,因此L is L1
现在是真的。你知道吗sys.getrefcount()
告诉你有多少便笺贴在袋子上。但是你需要告诉它关于便笺,而不是新的袋子。你知道吗最后,你可以把这些袋子放在其他袋子里,或者把袋子放在labeled drawers in a filing system(或者
dict
对象)里,而getrefcount()
也会把它们计算在内。因为便利贴不是追踪购物袋的唯一方法,对吧?你知道吗相关问题 更多 >
编程相关推荐