所谓的不同对象的字典似乎都互相引用

时间:2014-10-31 13:37:03

标签: python object dictionary

我正在迭代一个字符串,将其转换为不同的数据结构;它是一个对象字典,其中键是主字符串中当前位置的k长度子字符串,该值是一个对象,它计算主字符串“frames”中该子字符串的出现次数(即L-长度子串)。我只保留一个特定阈值的计数,一旦过去,该密钥就会被添加到最终返回的存储桶中。

class kmerRecord:
  _inFrames = {}
  _threshold = None

  reachedThreshold = False

  def __init__(self, threshold, inFrames = []):
    self._threshold = threshold
    if inFrames:
      self.incrementFrames(inFrames)

  # Debug
  def __repr__(self):
    return '<in: ' + str(self._inFrames) + ', t: ' + str(self.reachedThreshold) + '>'

  def incrementFrames(self, inFrames):
    if not self.reachedThreshold:
      for f in inFrames:
        if f in self._inFrames:
          self._inFrames[f] += 1
          if self._inFrames[f] >= self._threshold:
            self.reachedThreshold = True
            break
        else:
          self._inFrames[f] = 1


def kmerClump(data, k, L, t):
  kmers = {}
  found = []
  N = len(data)

  for i in range(N - k + 1):
    kmer = data[i : i + k]
    inFrames = range(max(0, i - L + k), min(i, N - L) + 1)

    if kmer in kmers:
      kmers[kmer].incrementFrames(inFrames)
    else:
      kmers[kmer] = kmerRecord(t, inFrames)

    # Debug
    # print kmer, min(inFrames), max(inFrames), kmers

    if kmers[kmer].reachedThreshold:
      found.append(kmer)

  return found

据我所知,我的代码正在做我上面所描述的。但是,它不起作用,当我尝试输出字典和对象时,看起来好像字典中的每个对象都是相同的:好像实际上只有一个对象而其他键值只是对它的引用,而不是不同的对象。我是否在某个地方弄错了语义,还是有其他问题?

0 个答案:

没有答案