python类的分段错误

python类的分段错误,python,class,dictionary,memory,segmentation-fault,Python,Class,Dictionary,Memory,Segmentation Fault,我试图解决hackerrank.com的这个问题。 但是,如果我试图创建一个只有一个空dict()作为数据成员的类,就会出现分段错误(测试用例3,4,7,8,12,13) 这是我的密码 解决方案1 class trie: def __init__(self): self.children = {} root = [trie(),0] fixed_root = root def add(root, word,level): if level < word

我试图解决hackerrank.com的这个问题。

但是,如果我试图创建一个只有一个空dict()作为数据成员的类,就会出现分段错误(测试用例3,4,7,8,12,13)

这是我的密码

解决方案1

class trie:
    def __init__(self):
        self.children = {}

root = [trie(),0]
fixed_root = root

def add(root, word,level):
    if level < word.__len__():
        if word[level] not in root[0].children.iterkeys():
            root[0].children[word[level]] = [trie(),0]
            root[0].children[word[level]][1] = root[0].children[word[level]][1]+1
            add(root[0].children[word[level]], word, level+1)
        else:
            root[0].children[word[level]][1] = root[0].children[word[level]][1]+1
            add(root[0].children[word[level]],word, level+1)
    else:
        root[0].children['/'] = None

def frequency_prefix(root, word, level):
    while level< word.__len__():
        if word[level] in root[0].children.iterkeys():
            root = root[0].children[word[level]]
            level +=1
        else:
            return 'not_found'
    return root

def stored_count(root):
    return root[1]

def find(root, word, level):
    f_p = frequency_prefix(root, word, level)
    if f_p == 'not_found':
        return 0
    else:
        return stored_count(f_p)

N = int(raw_input().strip())
for testcase in xrange(N):
    fun, word = map(str, raw_input().strip().split(' '))
    if fun == 'add':
        add(fixed_root, word, 0)
    if fun == 'find':
        print find(fixed_root, word, 0)
class-trie:
定义初始化(自):
self.children={}
root=[trie(),0]
固定根=根
def添加(根、字、级别):
如果级别
如果我尝试在IDE中运行它,则不会出错。 我成功地解决了这个挑战。这是公认的解决方案。我在此版本的解决方案中未使用任何类

解决方案2

root = [{},0]
fixed_root = root

def add(root, word,level):
    if level < word.__len__():
        if word[level] not in root[0].iterkeys():
            root[0][word[level]] = [{},0]
            root[0][word[level]][1] = root[0][word[level]][1]+1
            add(root[0][word[level]], word, level+1)
        else:
            root[0][word[level]][1] = root[0][word[level]][1]+1
            add(root[0][word[level]],word, level+1)
    else:
        root[0]['/'] = None

def frequency_prefix(root, word, level):
    while level< word.__len__():
        if word[level] in root[0].iterkeys():
            root = root[0][word[level]]
            level +=1
        else:
            return 'not_found'
    return root

def stored_count(root):
    return root[1]

def find(root, word, level):
    f_p = frequency_prefix(root, word, level)
    if f_p == 'not_found':
        return 0
    else:
        return stored_count(f_p)

N = int(raw_input().strip())
for testcase in xrange(N):
    fun, word = map(str, raw_input().strip().split(' '))
    if fun == 'add':
        add(fixed_root, word, 0)
    if fun == 'find':
        print find(fixed_root, word, 0)
root=[{},0]
固定根=根
def添加(根、字、级别):
如果级别
问题:


1) 我不明白为什么在解决方案1中出现分段错误。我在两种解决方案中使用相同的内存。我是python新手,所以我想我缺少一些关于python内存管理的东西

您可以为您的测试用例提供准确的输入,以及输出的副本吗?我用HackerRank的一个测试用例尝试了解决方案1,它对我有效。一个分段错误?正如错误消息中实际使用的短语“分段错误”?这不应该发生。Python中几乎没有任何东西会导致这种情况,我在代码中没有看到任何异常。请注意-即使解决方案1在IDE中也运行良好。Hackerrank具有特殊的内存和时间限制。但我不明白的是,我使用的内存是相等的,而不是为什么解决方案1显示分段错误。@user2357112是的,hackerrank显示分段错误。但是在我的IDE中,一切都很好。您能为您的测试用例提供准确的输入以及输出的副本吗?我用HackerRank的一个测试用例尝试了解决方案1,它对我有效。一个分段错误?正如错误消息中实际使用的短语“分段错误”?这不应该发生。Python中几乎没有任何东西会导致这种情况,我在代码中没有看到任何异常。请注意-即使解决方案1在IDE中也运行良好。Hackerrank具有特殊的内存和时间限制。但我不明白的是,我使用的内存是相等的,而不是为什么解决方案1显示分段错误。@user2357112是的,hackerrank显示分段错误。但在我的IDE中,一切都很好。