input: Write a function to implement a hash table in Python that supports insert, delete, and retrieve operations. The hash table should use a list of lists (a nested list) to handle collisions via chaining. The initial size of the hash table should be 256. Define the class HashTable with methods insert, retrieve, and delete.
  
  assert ht.insert("key1", "value1")==None
  assert ht.insert("key2", "value2")==None
  assert ht.retrieve("key1")=="value1"
  assert ht.retrieve("key2")=="value2"
  assert ht.delete("key1")==None
  assert ht.retrieve("key1")==None
output: 
  class HashTable:
      def __init__(self):
          self.size = 256
          self.table = [[] for _ in range(self.size)]
  
      def _hash(self, key):
          return hash(key) % self.size
  
      def insert(self, key, value):
          index = self._hash(key)
          for i, (k, v) in enumerate(self.table[index]):
              if k == key:
                  self.table[index][i] = (key, value)
                  return
          self.table[index].append((key, value))
  
      def retrieve(self, key):
          index = self._hash(key)
          for k, v in self.table[index]:
              if k == key:
                  return v
          return None
  
      def delete(self, key):
          index = self._hash(key)
          for i, (k, v) in enumerate(self.table[index]):
              if k == key:
                  del self.table[index][i]
                  return
  