python类的分段错误

时间:2016-05-03 17:56:10

标签: python class dictionary memory segmentation-fault

我试图解决hackerrank.com的这个问题。 https://www.hackerrank.com/challenges/contacts

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

Here是我的代码。

解决方案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)

如果我尝试在IDE中运行它,则不会出现错误。 我成功地解决了这个挑战。 Here是可接受的解决方案。我在这个版本的解决方案中没有使用任何课程。

解决方案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)

问题

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

0 个答案:

没有答案